JAVA 프로그래밍

문제

A님이 가위바위보를 선택하면 B님이 임의로 가위바위보를 선택하고 지는 가위바위보의 승패를 출력하는 문제입니다 이를 해결하는 프로그램을 작성하세요 
가위, 바위, 보 중 하나를 입력하세요 : 가위
A님은 가위를 냈습니다.
B님은 보를 냈습니다.
판정결과는 B님이 이겼습니다 

가위, 바위, 보 중 하나를 입력하세요 : 바위
A님은 바위를 냈습니다.
B님은 보를 냈습니다.
판정결과는 A님이 이겼습니다 

가위, 바위, 보 중 하나를 입력하세요 : 보
A님은 보를 냈습니다.
B님은 가위를 냈습니다.
판정결과는 A님이 이겼습니다 

알고리즘 설계

프로그램 시작 
   지는 가위바위보 선택
   지는 가위바위보 승패 출력
프로그램 종료

가위바위보 클래스
   가위바위보 초기화
   가위바위보 선택: 키보드 입력
   가위바위보 선택: 임의값
   가위바위보를 문자열로 표현
   가위바위보를 숫자로 표현
   상대편과 같은지 비교
   상대편을 이겼는지 비교

지는 가위바위보 클래스
   지는 가위바위보 초기화
   가위바위보 승패를 반대로 변경

프로그램 구현

     
 
 ※ 단계별 점검: A키(이전), D키(다음) 
 
	// 파일명 : ./Chapter13/RockPaperScissorsGame_Lose.java
	import java.util.Scanner;
	import rpsGame.RockPaperScissors_Lose;
		  
	public class RockPaperScissorsGame_Lose
	{
		// 프로그램 시작 
1		public static void main( String[] args ) {
			// 지는 가위바위보 초기화
2			RockPaperScissors_Lose playerA =
3			                                 new RockPaperScissors_Lose();
4			RockPaperScissors_Lose playerB =
5			                                 new RockPaperScissors_Lose();
		  
			// 지는 가위바위보 선택 
6			playerA.select( new Scanner( System.in ) );
7			playerB.select();
8			System.out.println( "A님은 " +
9			                                playerA
10			                                        + "를 냈습니다." );
11			System.out.println( "B님은 " +
12			                                playerB
13			                                        + "를 냈습니다." );
		  
			// 지는 가위바위보 승패 출력 
14			if ( playerA.equals( playerB ) )
15				System.out.println( "A님과 B님이 비겼습니다" );
16			else if ( playerA.win( playerB ) )
17				System.out.println( "A님이 이겼습니다" );
18			else
19				System.out.println( "B님이 이겼습니다" );
		  
		// 프로그램 종료 
20		}
	}
		  
	// 파일명 : ./src/rpsGame/RockPaperScissors.java
	package rpsGame;
	import java.util.Scanner;
		  
	// 가위바위보 클래스 
	public class RockPaperScissors
	{
		private int player;
		private final int SCISSORS = 0;
		private final int ROCK = 1;
		private final int PAPER = 2;
		  
		// 가위바위보 초기화   
R1b		public RockPaperScissors() {
			this.player = SCISSORS;
R1e		}
		  
		// 가위바위보 선택 :  키보드 입력 	
R2b		public void select( Scanner scan ) {
			String input = "";
			do {
				System.out.print( "가위, 바위, 보 중 하나를 입력하세요 : ");
				input = scan.next();
			} while( !input.equals( "가위" ) && !input.equals( "바위" ) && !input.equals( "보" ) );
			scan.close();
		  
			if ( input.equals( "가위" ) )
				this.player = SCISSORS;
			else if ( input.equals( "바위" ) )
				this.player = ROCK;
			else
				this.player = PAPER;
R2e		}
		  
		// 가위바위보 선택 :  임의값 	
R3b		public void select() {
			this.player = (int)( Math.random() * 3 );
R3e		}
		  
		// 가위바위보를 문자열로 표현 	
R4b		public String toString() {
			if ( this.player == SCISSORS )
				return "가위";
			else if ( this.player == ROCK )
				return "바위";
			else
				return "보";
R4e		}
		  
		// 가위바위보를 숫자로 표현 
		public int toInteger() {
			return this.player;
		}
		  
		// 상대편과 같은지 비교 	
R5b		public boolean equals( RockPaperScissors counterpart ) {
			return this.player == counterpart.toInteger();
R5e		}
		  
		// 상대편을 이겼는지 비교 	
R6b		public boolean win( RockPaperScissors counterpart ) {
R61			return
R62			       win( counterpart.toInteger() );
R6e		}
		  
R7b		public boolean win( int counterpart ) {
			if ( ( ( this.player == SCISSORS ) && ( counterpart == PAPER ) )
					|| ( ( this.player == PAPER ) && ( counterpart == ROCK ) )
					|| ( ( this.player == ROCK ) && ( counterpart == SCISSORS ) ) )
				return true;
			else
				return false;
R7e		}
	}
		  
		  
	// 파일명 : ./src/rpsGame/RockPaperScissors_Lose.java
	package rpsGame;
		  
	// 지는 가위바위보 클래스 
	public class RockPaperScissors_Lose extends RockPaperScissors {
		// 지는 가위바위보 초기화   
L1b		public RockPaperScissors_Lose() {
L11			super();
L1e		}
		  
		// 가위바위보 승패를 반대로 변경  	
		@Override
L2b		public boolean win( int counterpart ) {
L21			return !
L22			        super.win( counterpart );
L2e		}
	}

실행 순서 확인