Java 为什么在我的上一个石头游戏(Nim)实现中,另一个玩家从未轮到它?
在给定的代码中,您的Java 为什么在我的上一个石头游戏(Nim)实现中,另一个玩家从未轮到它?,java,Java,在给定的代码中,您的main方法实际上将自己简化为 left -= User; } else { continue; } } else { // why is it never executed? 现在很清楚,你的电脑播放器cpu永远不会轮到你 问题是你的UserOrCpu+=1赋值不在正确的范围内,因此没有任何效果 “fixe
main
方法实际上将自己简化为
left -= User;
} else {
continue;
}
} else { // why is it never executed?
现在很清楚,你的电脑播放器cpu
永远不会轮到你
问题是你的UserOrCpu+=1代码>赋值不在正确的范围内,因此没有任何效果
“fixed”main
方法应该如下所示
public static void main(String[] args) {
Random r = new Random();
int left = r.nextInt(16) + 15;
int userOrCpu = 1, user;
while (true) {
user = userMove(left);
if (isValidEntry(left, user)) {
if (left == user) {
playLastStone(userOrCpu);
break;
}
left -= user;
}
}
}
publicstaticvoidmain(字符串[]args){
随机r=新随机();
int left=r.nextInt(16)+15;
int UserOrCpu=1,User=1,temp;
while(true){
如果(UserOrCpu%2==1){
User=userMove(左);
if(iValidEntry(左,用户)){
如果(左==用户){
playLastStone(UserOrCpu);
打破
}
左-=用户;
}否则{
继续;
}
}否则{
计算机移动(左);
temp=computerMove(左);//第二次执行计算机移动吗?
如果(left在给定的代码中,您的main
方法实际上将其自身简化为
left -= User;
} else {
continue;
}
} else { // why is it never executed?
现在很清楚,你的电脑播放器cpu
永远不会轮到你
问题是您的UserOrCpu+=1;
赋值不在正确的范围内,因此没有任何效果
“fixed”main
方法应该如下所示
public static void main(String[] args) {
Random r = new Random();
int left = r.nextInt(16) + 15;
int userOrCpu = 1, user;
while (true) {
user = userMove(left);
if (isValidEntry(left, user)) {
if (left == user) {
playLastStone(userOrCpu);
break;
}
left -= user;
}
}
}
publicstaticvoidmain(字符串[]args){
随机r=新随机();
int left=r.nextInt(16)+15;
int UserOrCpu=1,User=1,temp;
while(true){
如果(UserOrCpu%2==1){
User=userMove(左);
if(iValidEntry(左,用户)){
如果(左==用户){
playLastStone(UserOrCpu);
打破
}
左-=用户;
}否则{
继续;
}
}否则{
计算机移动(左);
temp=computerMove(左);//第二次执行计算机移动吗?
如果(左)对不起,我不明白这个代码应该做什么。你能说得更具体一点吗?当你说“…通过了}其他{
..:还有两个}其他{
在那个代码片段中。你指的是哪一个?为什么它应该更进一步,left-=User
是该路径的while循环中的最后一行?你应该清理代码,有未使用的局部变量。这是经典的。对不起,我不明白这个代码应该做什么。请你说得更具体一点,好吗?当你说的时候“…通过了}其他{
..:还有两个}{
在那个代码片段中。你指的是哪一个?为什么它应该更进一步,left-=User
是该路径的while循环中的最后一行?你应该清理代码,有未使用的局部变量。这是经典的,所以我用你的新代码修复了我的代码,但现在计算机得到了两个回合;在第行computerMove(左)之后,它下降到“temp=computerMove(左)”,然后该代码再次打印computerMove。我之所以输入temp,是因为我将把computerMove(左)作为int。@LogicNAME它仍然是您的代码,正如您在问题描述中给出的;包括computerMove(左)的两次调用
method。我不明白为什么电脑播放器有两个回合让你感到惊讶……毕竟,这是你实现的。如果你不想这样做,那么只保留temp=computerMove(左);
语句并删除另一个//我回答您的问题时向您展示了需要更改的内容,以便您能够克服遇到的困难。然而,这并不意味着我要为您修复所有代码或实现Nim。因此,我用您的新代码修复了我的代码,但现在计算机在运行完computerMove后有两次机会(左),它下降到“temp=computerMove(左)”,然后该代码再次打印computerMove。我之所以输入temp,是因为我将把computerMove(左)作为int。@LogicNAME它仍然是您的代码,正如您在问题描述中给出的;包括computerMove(左)的两次调用
method。我不明白为什么电脑播放器有两个回合让你感到惊讶……毕竟,这是你实现的。如果你不想这样做,那么只保留temp=computerMove(左);
语句并删除另一个//我回答了您的问题,向您展示了需要更改的内容,以便您能够克服遇到的困难。但是,这并不意味着我可以为您修复所有代码或实现Nim。