foxpacking

Programming Lessons

Java 언어 Korean

Java 총 정리[22. 제어문 문제 5]

문제 풀기 5

별 찍기 문제는 잘 풀어 보셨나요? 차분히 반복문을 돌리고 조건문을 조합해서 정리를 하면서 만들었다면 분명히 문제 없이 완성을 하셨을 겁니다. 하지만 별 찍기 같은 문제는 프로그램의 완성도로 봐서는 부족한 문제 입니다. 그래서 완성도 있게 입력과 출력을 가지고 게임과 같은 요소가 있는 문제라면 더 좋지 않을 까요? 저도 당연히 별 찍기 문제도 좋지만 완성도를 가지는 문제가 해보는 것 또한 도움이 된다고 생각을 합니다.

이전 스물 걸음과 스물 한걸음에서 했던 별 찍기 문제는 알고리즘을 활용해서 했다면 이번 문제는 좀 더 완성도를 생각해서 프로그램 답게 만드는 문제가 될 것 입니다.

컴퓨터와 가위 바위 보 게임 프로그램을 만들어 보겠습니다. 이 가위 바위 보 게임 같은 경우에는 이전 배웠지만 활용을 한번도 하지 못한 Random을 사용하고 또한 반복문이나 조건문을 사용하여 문제에 제시된 내용과 일치 되게 문제를 푸시면 됩니다. 분명히 이 글을 보시고 문제를 풀어보고 공부를 하신다면 실력이 향상이 되실 겁니다.

가위 바위 보 문제

현재까지 배운 모든 내용을 사용을 해서 만드시면 됩니다. 

변수 | 연산자 | 입력문 | 출력문 | 조건문 | 반복문 | break문 | continue문 |  Random 

위에 배운 내용을 모두 활용 하여 구현을 하시면 됩니다.

※ 정답은 하나가 아닙니다. 문제의 대한 결과가 동작을 한다면 정답입니다. 밑에 나오는 정답은 참고를 하시면 됩니다.

※ 결과에 대한 테스트를 예시로만 하는 것보다 여러가지를 하셔서 생각하는 결과로 나오는 확인을 하시는 것이 더욱 더 좋습니다.

가위바위보문제 사진

위 문제를 설명 드리겠습니다.

우선 첫 번째는 게임 시작과 종료를 숫자로 선택을 해서 게임을 진행하거나 종료를 합니다. 그 이외 값을 입력을 하면 “잘못된 입력입니다.” 출력 후 다시 게임 시작과 종료로 돌아갑니다.

게임을 시작을 하면 1. 가위 2.바위 3.보 중에 숫자를 하나를 사용자가 선택을 하게 됩니다. 그 때 컴퓨터는 Random을 이용하여 1~3까지 난수를 받아서 가지고 있습니다. 만약에 사용자가 1~3의 숫자를 입력을 하지 않고 다른 숫자를 입력하면 “잘못된 입력입니다.” 출력 후 게임 시작과 종료가 나오는 곳으로 돌아갑니다. 

사용자가 올바르게 입력을 한 경우 컴퓨터의 값과 사용자의 값을 가지고 가위 바위 보를 진행하여서 누가 이겼는지 출력을 해주면 됩니다. 숫자와 가위 바위 보 연결을 한 부분은 위 문제에 잘 나와 있으니 참고 해주세요.

출력이 끝나고 나면 다시 게임 시작과 종료 화면이 나오게 합니다. 이 가위 바위 보 게임은 종료를 하기 전 까지는 계속 동작이 되게 구현을 하시면 됩니다.

위 문제를 Class를 생성하고 Main문에 소스를 구현해 주세요.

실행 관련 걸음 : 다섯 걸음, 여섯걸음

참고해주세요.


import java.util.Random;
import java.util.Scanner;

public class Q5 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
Random r= new Random(); // 랜덤을 사용하기 위한 객체를 생성

while(true) { //무한 반복
	System.out.print("1.게임시작 2.종료 : "); //출력
	int num = sc.nextInt(); // 입력
	if(num == 1) { //num의 정수 변수가 1이면 실행
		System.out.print("1.가위 2.바위 3.보 : ");
		int user = sc.nextInt(); // 입력
		int com = r.nextInt(3)+1; // 1~3까지 랜덤 값 받기
		// user 2 - com 1 - user 1
		// user 1 - com 3 - user -2
		// user 3 - com 2 - user 1
		if(user > 0 && user < 4) { // user 값이 1~3이면 실행
			int result = user - com;
			if(result == 1 || result == -2) {
				System.out.println("user승  user : "+user+
				", com :"+com);
			}
			else if(result == 0) {
				System.out.println("무승부  user : "+user+
				", com : "+com);
			}
			else {
				System.out.println("com승  user : "+user+
				", com : "+com);
			}
		}
		else { //위 if 조건이 거짓이면 실행
			System.out.println("잘못된 입력입니다.");
		}
	}
	else if(num == 2) { // num 정수 변수 값이 2이면 싱행
		System.out.println("프로그램을 종료합니다.");// 출력
		break;//반복문 탈출
	}
	else { // num 정수 변수 값이 1,2가 아니면 실행
	System.out.println("잘못된 입력입니다."); //출력
	}
     }
   }
}

        

생각을 해보기

위의 문제 같은 경우 조건문으로 가위 바위 보를 다 비교를 할 수 있지만 연산을 이용해서 이기는 경우와 지는 경우의 변수를 만들어서 그 변수로 분기를 한다면 좀 더 소스가 간결해 질 수 있습니다. 그리고 이렇게 완성된 프로그램을 만듦으로써 큰 구조에 대한 이해를 하시면 도움이 됩니다.

※ 구조를 만들고 안에 채워 넣는 방식으로 한다면 생각을 하는 부분이 작아지기 때문에 구조를 만들고 안의 기능을 만드는 식을 추천 드립니다.

Dolphin

About Author

Leave a comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You may also like

Korean Programming 기초

IT 개발자 VS 프로축구선수 비교?

IT 개발자와 프로축구선수의 같은 점과 다른 점? 프로그래밍 공부를 하시면서 개발자로 취업을 하려고 하는데 과연 취업을 할 수 있을까? IT
Korean 클라우드

AWS 로그인 불가능, AWS고객 센터 이메일 문의 결과는?

AWS 고객센터 이메일 문의 솔직후기 AWS를 사용하기 위해 로그인을 하는 경우 이메일로 코드 번호를 보내지만 이메일로 받을 수 없는 상황이거나