我在模数计算以及此游戏的条件下陷入困境。有什么建议?
{
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 :(得分: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中存在差异?你能解释一下吗?
再次感谢。