[JAVA]조건문 연습

SGJ·2023년 11월 29일

JAVA연습

목록 보기
2/3
post-thumbnail

가위바위보 게임을 만드는 문제.

[전체코드]
public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 가위 0 바위 1 보 2
		Scanner scann = new Scanner(System.in);
		int computerChoice = -1;
		int userChoice = -1;
		String result = " ";
		String Computer;
		String User;

		computerChoice = (int) (Math.random() * 3 + 1);
		if (computerChoice == 1)
			Computer = "가위";
		else if (computerChoice == 2)
			Computer = "바위";
		else
			Computer = "보";

		System.out.println("[ 가위 바위 보 게임 ]");
		System.out.println("컴퓨터는 결정했습니다.");
		System.out.print("당신의 차례입니다. (가위 1 / 바위 2 / 보 3 )");
		userChoice = scann.nextInt();

		if (userChoice == 1)
			User = "가위";
		else if (userChoice == 2)
			User = "바위";
		else {
			User = "보";
			userChoice = 3;
		}

		if (computerChoice == userChoice) {
			result = "비겼습니다.";
		} else {
			userChoice = userChoice + 1;
			if (userChoice > 3) {
				userChoice = userChoice - 3;
			}
			if (computerChoice == userChoice) {
				result = "졌습니다.";
			} else {
				result = "이겼습니다.";
			}
		}

		System.out.println("컴퓨터 : " + Computer);
		System.out.println("유저 : " + User);
		System.out.println(result);
	}

가위바위보의 승리 규칙을 어떻게 설계하느냐에 따라 다르게 코드가 짜일 수 있는 문제입니다.

입력부
		Scanner scann = new Scanner(System.in);
		int computerChoice = -1;
		int userChoice = -1;
		String result = " ";
		String Computer;
		String User;

입력을 받기위한 Scanner, 그리고 각각 상대(컴퓨터)와 유저의 선택값을 받기 위한 정수형 변수 두 개, 그리고 결과를 표시하기위한 문자열과 상대(컴퓨터)와 유저의 선택지를 보여주기 위한 문자열 두 개가 정의되었습니다.

처리부1
		computerChoice = (int) (Math.random() * 3 + 1);
		if (computerChoice == 1)
			Computer = "가위";
		else if (computerChoice == 2)
			Computer = "바위";
		else
			Computer = "보";

		System.out.println("[ 가위 바위 보 게임 ]");
		System.out.println("컴퓨터는 결정했습니다.");
		System.out.print("당신의 차례입니다. (가위 1 / 바위 2 / 보 3 )");
		userChoice = scann.nextInt();

		if (userChoice == 1)
			User = "가위";
		else if (userChoice == 2)
			User = "바위";
		else {
			User = "보";
			userChoice = 3;
		}

상대(컴퓨터)의 입력은 Math클래스의 랜덤함수를 사용하여 셋 중 하나의 값이 랜덤으로 입력되게 하였고, 유저의 입력은 Scanner를 이용하여 값을 받되 경우의 수가 세 가지인 만큼 그 외의 값 입력 시 3 즉 '보'로 입력되게 하였습니다.

처리부 2
		if (computerChoice == userChoice) {
			result = "비겼습니다.";
		} else {
			userChoice = userChoice + 1;
			if (userChoice > 3) {
				userChoice = userChoice - 3;
			}
			if (computerChoice == userChoice) {
				result = "졌습니다.";
			} else {
				result = "이겼습니다.";
			}
		}

가장 간단한 규칙인 서로 같으면 비긴다는 점을 if문을 사용하여 배제하고 나면 승리 혹은 패배라는 경우의 수가 남는데 이를 이용한 방법은 덧셈 후 비교입니다.
자신의 값에서 1을 더한 상태에서 비교하였을 때 상대(컴퓨터)와 값이 같으면 더한쪽은 패배하는 규칙을 가지고 있습니다.
그리고 2를 더한 상태에서 비교하였을 때 상대(컴퓨터)와 값이 같으면 더한쪽은 승리하는 규칙도 존재하지만 else문을 사용하여 생략이 가능합니다.
하지만 가위 바위 보에서 보에서 +1, 바위에서 +2 등 세 경우의 수를 넘어가는 연산이 실행하는 경우 if문을 이용하여 오버플로우를 자체적으로 적용시켜 다른 값으로 적용되게 하였습니다.

출력부
		System.out.println("컴퓨터 : " + Computer);
		System.out.println("유저 : " + User);
		System.out.println(result);

출력은 상대(컴퓨터)의 선택, 유저의 선택, 그리고 유저의 시점에서의 승패여부를 출력합니다.

실행 결과

profile
개발자가 되고싶은 자

0개의 댓글