Java 使用模数的爪哇岩剪

Java 使用模数的爪哇岩剪,java,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 com

我被困在模量计算以及这个游戏的条件上。有什么建议吗

{
   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");

     }

   }
}   

你的情况总是会导致平局或电脑获胜

根据规则:

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模3

在玩家获胜的所有情况下,差值
comp-x
为-1或2,两者均为2模3

因此,正确的逻辑是:

 if (result == 0 ) {
     System.out.println ("A Tie!") ;
 } else if (result == 1) {
     System.out.println ("comp win");
 } else {
     System.out.println ("you win");
 }
正如Henry所更正的,Java的modulu对于负数的行为不同,因此您应该将结果的计算更改为:

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

我是根据我为python rock、paper、scissor、lizard和spock游戏所做的逻辑来做这件事的。形式是(用户计算机)%5,我得到了正确的结果。为什么java中存在差异。你能解释一下吗


再次感谢。

正确缩进代码。为什么要使用mod?为什么不使用if-else呢?因为Java中的-2%3==-2更好地编写测试
result=(comp-x+3)%3