Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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代码不会产生下一波?_Java_Loops_Arraylist - Fatal编程技术网

我的Java代码不会产生下一波?

我的Java代码不会产生下一波?,java,loops,arraylist,Java,Loops,Arraylist,所以我在做一个有一波敌人的游戏。Wave类包含一个更新方法,该方法更新Wave类中包含的敌人数组列表中的所有敌人。Wave类还有一个名为beat的布尔值,它决定玩家是否击败了当前Wave。不过,我现在一直在尝试在球员击败第一名球员后开始下一波比赛。arraylist中的所有波开始时,除第一个波外,其节拍变量均为true。目前只有两波。我不知道这为什么不起作用。谢谢你的帮助 for(int i = 0; i < 1;i++) { if(!w.get(i).be

所以我在做一个有一波敌人的游戏。Wave类包含一个更新方法,该方法更新Wave类中包含的敌人数组列表中的所有敌人。Wave类还有一个名为beat的布尔值,它决定玩家是否击败了当前Wave。不过,我现在一直在尝试在球员击败第一名球员后开始下一波比赛。arraylist中的所有波开始时,除第一个波外,其节拍变量均为true。目前只有两波。我不知道这为什么不起作用。谢谢你的帮助

    for(int i = 0; i < 1;i++)
    {
        if(!w.get(i).beat)
            w.get(i).update(g2d);
        else if(w.get(i).beat)
        {
            if(i-1 != -1)
            {
                if(w.get(i-1).beat && w.get(i).beat)
                {
                    w.get(i).beat = false;
                }
            }
        }
    }

我不确定我是否理解你的代码,但我可以告诉你两件事。首先,您的循环从不循环,因为一旦索引为1,它就结束,而不会再次执行代码。其次

 if(i-1 != -1)
            {
                if(w.get(i-1).beat && w.get(i).beat)
                {
                    w.get(i).beat = false;
                }
            }
由于我所说的,始终为false。

在将当前波形的节拍设置设置为false后,您的循环将在下一个波形中增加I,并且错过调用该情况下的更新方法。看起来您应该在设置beat=false后立即调用其update方法,或者按照如下相反的顺序执行if测试:

for(int i = 0; i < numWaves;i++) // upper range should be the number of waves
{
    if(w.get(i).beat)
    {
        if(i>0)   // this can be simplified to "if (i>0)"
        {
            if(w.get(i-1).beat)  // no need to check w.get(i).beat here
            {
                w.get(i).beat = false;
            }
        }
    }
    else 
        w.get(i).update(g2d);
}

我不知道为什么你会将一个波的拍状态初始化为true,然后在轮到它时将其设置为false。为什么不将all初始化为false,因为它们确实还没有被击败?

谢谢您的帮助。事实证明,实际问题是我在wave类的更新方法中处理beat的方式。我确实使用了你的建议,将节拍初始化为false,只需要有一个字段来判断波是否是第一个。