2014-10-18 50 views
-1

我陷入模數計算以及此遊戲的條件。有什麼建議麼?java中使用模量的岩石紙剪刀

{ 
    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 2014-10-18 05:44:53

+0

你爲什麼使用mod?爲什麼不使用,如果其他? – Edwin 2014-10-18 05:51:43

回答

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 i小號-2或1,並且兩者都是1 modulu 3.

在所有的情況下,玩家贏得其中,所不同的是comp - x -1或2,且兩者都是2 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"); 
} 

正如亨利糾正,Java的modulu表現不同爲負數,所以你應該改變結果的計算:

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

由於在Java中-2%3 == -2更好地寫測試'result =(comp - x + 3)%3;' – Henry 2014-10-18 06:04:24

+0

@Henry感謝您的更正! – Eran 2014-10-18 06:08:28

0

謝謝秒。

我這樣做是基於我爲python rock,paper,scissor,lizard,spock games所做的邏輯。正式是(用戶電腦)%5,我得到了正確的結果。爲什麼在java中有一個區別。你能解釋一下嗎?

再次感謝。