在行中时while循环的冲突(Java)



我构建了一个包含在世界之间移动的游戏。程序的主类假设从呈现第一个世界(world1,它是firstWorldClass的一个实例)开始。它应该停留在这个世界中,直到类world1中的一个变量发生变化(由world1.getMoveWorldIndicator()检查)。然后,它应该移动到下一个世界-删除world1,构建world2并将其添加到图形视图中。从第二世界到第三世界也是如此。当我在两个世界之间做这件事时(删除添加(world2)后的所有代码),或者如果我只保留第二个世界和第三个世界之间的转换,它会很好地工作。当我把两者都放在一行时,它就停止工作了(当添加第二个while循环时)。我的代码:

public class GameManager extends Program implements GameContstants{
public void init() {
    world1=new firstWorldClass();
    add(world1);
    while(!world1.getMoveWorldIndicator()){
        pause(200);
        if(world1.getMoveWorldIndicator())break;
    }
    remove(world1);
    world1=null;
    world2=new secondWorldClass();
    add(world2);
    pause(200);
    while(! world2.getMoveWorldIndicator()){
        pause(200);
        if(world2.getMoveWorldIndicator()) break;
    }
    remove(world2);
    world2=null;
    world3=new thirdWorldClass();
    add(world3);
}   
private firstWorldClass world1;
private secondWorldClass world2;
private thirdWorldClass world3;

}

我怀疑while循环之间存在某种交互或内存问题,但我愿意听到任何想法/不同的方法。

谢谢!

我认为这里有很多因素在起作用:

  • 清理您的代码。保留一些编码规则对于修复错误非常重要
  • 不要重复使用代码。提取到方法或类
  • 保持类命名约定=>类的大写字母
  • 不要将变量设置为null。通常编译器会在优化时为您执行此操作。如果您仍然想手动释放空间或变量名,则应该在代码周围使用范围括号{}
  • 分解你的代码,我们会看到很多冗余,比如"getMoveWorldIndicator()"每个循环检查两次,与只使用一次没有任何不同的效果

我在这里提供了一个更干净但不同的版本,给你看。

但为了真正帮助您处理代码,我们确实需要更多的代码来深入了解问题。

public class GameManager /* extends ... */{
    static class WorldBase {
        public boolean getMoveWorldIndicator() {
            return false;
        }
    }
    static class FirstWorld extends WorldBase {}
    static class SecondWorld extends WorldBase {}
    static class ThirdWorld extends WorldBase {}
    public void init() {
        playWorld(new FirstWorld());
        playWorld(new SecondWorld());
        playWorld(new ThirdWorld());
    }
    private void playWorld(final WorldBase pWorld) {
        add(pWorld);
        while (!pWorld.getMoveWorldIndicator()) {
            pause(200);
        }
        remove(pWorld);
    }
    private void remove(final WorldBase pWorld1) {}
    private void pause(final int pI) {}
    private void add(final WorldBase pWorld1) {}
}

最新更新