2014-10-18 1 views
-1

나는이 게임의 조건뿐만 아니라 모듈러스 계산에 갇혀있다. 어떤 제안?자바로 바위 종이 가위를 사용하여

{ 
    public static void main(String[] args) 
    { 
     int x, comp, result; 
     x = 0; 
     String user; 
     String computer_choice = null; //declare variables for each value 
    // generate computer number 
     comp = (int) (3 * Math.random()) + 1 ; 
     System.out.println (comp); 
     //convert# to a value 
     if (comp == 0) 
     { 
      computer_choice = "Rock"; 
     } 

     else if (comp == 1) 
     { 
      computer_choice = "Paper"; 
     } 

     else if (comp == 2) 
     { 
      computer_choice = "Scissor"; 
     } 
     // print out the message 
     System.out.println ("Please select one of [R/P/S]: "); 
     Scanner keyboard = new Scanner (System.in); 
     user = keyboard.nextLine(); 

     if (user.equals ("R")|| user.equals("r")) 
     { 
      user = "Rock"; 
      x = 0; // rock 
     } 
     else if (user.equals ("P")|| user.equals("p")) 
     { 
      user = "Paper"; 
      x = 1;//paper 
     } 
     else if (user.equals ("S")|| user.equals("s")) 
     { 
      user = "Scissor"; 
      x = 2; 
     } 
     else 
     { System.out.println ("Please enter a valid values"); 
     } 
    System.out.println ("You chose: " + user); 
    //print out the computer choice 

    System.out.println ("I chose\t" + computer_choice); 

    result = (comp - x) % 3 ; 

    System.out.println (result); 
    if (result == 0)// if the game is tie 
    { 
     System.out.println ("A Tie!") ; 
    } 

    else if (result == 1 || result == 2) 
    { 

     System.out.println ("comp win"); 
    } 

    else 
    { 
     System.out.println ("you win"); 

    } 

    } 
} 
+2

코드를 올바르게 들여 씁니다. – Tirath

+0

왜 MOD를 사용하고 있습니까? 왜 다른 사람을 사용하지 않습니까? – Edwin

답변

1

귀하의 조건에 따라 항상 동점 또는 컴퓨터가 승리하게됩니다. 규칙에 따라

:

0 비트 2
1 비트 0
2 비트, 그렇지 않으면 1
- 타이

우리는 가능한 모든 조합의 테이블 아래로 쓸 수

:

computer |player |computer - player | mod 3 | winner 
----------------------------------------------------- 
0  | 0  |  0   | 0 | tie 
0  | 1  |  -1   | 2 | player 
0  | 2  |  -2   | 1 | comp 
1  | 0  |  1   | 1 | comp 
1  | 1  |  0   | 0 | tie 
1  | 2  |  -1   | 2 | player 
2  | 0  |  2   | 2 | player 
2  | 1  |  1   | 1 | comp 
2  | 2  |  0   | 0 | tie 

컴퓨터가 승리하는 모든 경우에서 차이점은 comp - x입니다. (S) -2 또는 1이고, 양쪽 모두의 경우, 플레이어가 승리하는 경우, 차분 comp - x은 -1 또는 2 모두 따라서 2 modulu 3.

올바른 논리이다에서 1 modulu 3.

이다 다음과 같습니다

if (result == 0) { 
    System.out.println ("A Tie!") ; 
} else if (result == 1) { 
    System.out.println ("comp win"); 
} else { 
    System.out.println ("you win"); 
} 

헨리 수정으로, 자바의 modulu가 음수 다르게 작동, 그래서 당신이 결과의 계산을 변경해야합니다 :

result = (comp + 3 - x) % 3 ; 
+0

Java에서 -2 % 3 == -2이므로 결과를 더 잘 작성합니다. (결과 - (comp-x + 3) % 3;) – Henry

+0

@Henry 수정 해 주셔서 감사합니다! – Eran

0

감사 에스.

저는 파이썬 바위, 종이, 가위, 도마뱀, 스폿 게임에서했던 논리에 기반하여 이것을 수행했습니다. 형식은 (사용자 - 컴퓨터) % 5이고 올바른 결과를 얻었습니다. Java에서 차이점이있는 이유는 무엇입니까? 설명 할 수 있습니까?

다시 감사드립니다.

관련 문제