Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 - Fatal编程技术网

Java 为什么我的循环机制不工作?

Java 为什么我的循环机制不工作?,java,loops,Java,Loops,很抱歉,如果这是一个非常封闭的问题,对其他人不会有用,但我只是被这个错误难住了,我已经好几个星期没能解决它了 我正在开发一款基于波浪的生存游戏,目前正在开发一种产卵机制。 我编写的代码在一个wave中运行得很好,但在以后的wave中却无法重新启动。 我已经编写了以下代码: public void run() { while (ingame) { if (enemyList.isEmpty()) { stopSpawn = false;

很抱歉,如果这是一个非常封闭的问题,对其他人不会有用,但我只是被这个错误难住了,我已经好几个星期没能解决它了

我正在开发一款基于波浪的生存游戏,目前正在开发一种产卵机制。 我编写的代码在一个wave中运行得很好,但在以后的wave中却无法重新启动。 我已经编写了以下代码:

public void run() {
    while (ingame) {
        if (enemyList.isEmpty()) {
            stopSpawn = false;
            try {
                Thread.sleep(500);
                spawnNewEnemy();
            } catch (InterruptedException ex) {
                System.out.println("Interrupted");
            }
        } else {
            if (!enemyList.isEmpty() && !stopSpawn) {
                // getEnemyAmount returns the amount of enemies that should be spawned this wave
                for (int enemiesSpawned = 0; enemiesSpawned < getEnemyAmount(); enemiesSpawned++) {
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException ex) {
                    }
                    System.out.println(currentWave);
                    spawnNewEnemy();
                }
                stopSpawn = true;
            }
        }
    }
}
public void run(){
while(ingame){
if(enemyList.isEmpty()){
stoppawn=false;
试一试{
睡眠(500);
繁殖新的敌人();
}捕获(中断异常例外){
系统输出打印项次(“中断”);
}
}否则{
如果(!enemyList.isEmpty()&&!stopsawn){
//getEnemyAmount返回此波中应该产生的敌人数量
对于(int-enemiesSpawned=0;enemiesSpawned
这是一种新的方法

 public void spawnNewEnemy() {
    Random spawn = new Random();
    int spawnX = spawn.nextInt(500);
    int spawnXTest = b.bX - spawnX;
    if (spawnXTest < 20) {
        spawnX = spawnX + 20;
    } else {
    }
    int spawnY = spawn.nextInt(500);
    int spawnYTest = b.bX - spawnY;
    if (spawnYTest < 20) {
        spawnY = spawnY + 20;
    } else {
    }
    spawnY = spawnY + 20;
    spawnX = spawnX + 20;
    enemyList.add(new Enemy(spawnX, spawnY));
}
public-void-new敌军(){
随机繁殖=新随机();
int spawnX=spawn.nextInt(500);
int-spawnXTest=b.bX-spawnX;
if(spawnXTest<20){
spawnX=spawnX+20;
}否则{
}
int spawnY=spawn.nextInt(500);
int spawnYTest=b.bX-spawnY;
if(spawnYTest<20){
繁殖=繁殖+20;
}否则{
}
繁殖=繁殖+20;
spawnX=spawnX+20;
添加(新敌人(繁殖,繁殖));
}

我猜循环的问题在于
stopsawn


您在第一波之后将其设置为
true
,在开始下一波之前可能不会设置为“false”。

我可以从您的代码中读取以下内容:

  • 如果敌人列表为空,则将
    stopsawn
    设置为false并生成敌人
  • 这会触发你的else语句
  • 在那里,你可以根据敌人数量繁殖敌人
  • stopsawn
    设置为true,因此不再触发else语句
  • 在您的enemylist为空之前,不会再发生任何事情
  • 如果您的EneyList再次为空,则重新开始

逻辑似乎还可以,所以我认为要么你通过
spawnewfriend()
产生敌人的方式是错误的,要么你从
enemyList
中移除敌人的方式是错误的。我看不到这两个代码,所以在这个答案中我只能做到这一点。

有什么不起作用?有什么异常吗?你能解释一下错误是什么吗?你的问题并不明显。你实际上是在做:
if(enemyList.isEmtpy()){}else{if(!enemyList.isEmpty()){}
我不认为这是完全正确的。关于代码中发生的事情,请参阅我的答案。请随意评论你的想法。我同意这一部分,在不知道
的情况下
getEnemyAmount()
code和其他读取/写入
stoppawn
enemyList
的代码,我们无法确定问题出在哪里。它不可能是isEmpty子句,因为我刚刚测试了它,返回在清除wave后列表实际上是空的!但是,如果有帮助,我已经在问题中添加了一些代码,如果您确定我如果不是这样,那么清除敌人是如何工作的呢?我最好的猜测是,这并不顺利。您是否考虑过调试日志
enemyList.size()
?或者在调试时观察值?然后您将看到列表中有多少敌人,并且可能会看到应用程序中出现了什么问题。