Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在我的上一个石头游戏(Nim)实现中,另一个玩家从未轮到它?_Java - Fatal编程技术网

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。