在使用模数的Java的岩石纸剪刀

时间:2014-10-18 05:35:46

标签: 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 个答案:

答案 0 :(得分: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为-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 ;

答案 1 :(得分:0)

感谢。

我是根据我为python摇滚,纸张,剪刀,蜥蜴,spock游戏所做的逻辑做的。正式是(用户计算机)%5,我得到了正确的结果。为什么java中存在差异?你能解释一下吗?

再次感谢。