创建一个检查列表是否为空的方法

时间:2014-07-08 18:25:46

标签: android list object

我想做的是在一个snakepart列表为空时结束游戏。 此方法从列表中删除一个对象:

 public void diet() {
    parts.remove(parts.get(parts.size()-1));
}

此方法应该检查我的蛇形列表是否为空?

public boolean checkStarved() {
    int len = parts.size();
    SnakePart head = parts.get(0);
    for(int i = 1; i < len; i++) {
        SnakePart part = parts.get(i);
        if(parts.isEmpty())
            return true;
    }        
    return false;
}

虽然它没有。 我在更新类期间返回World类中的布尔值,如下所示:

if(snake.checkStarved()){

            gameOver = true;

    }

snakepart类看起来像这样:

public class SnakePart {
public int x, y;

public SnakePart(int x, int y) {
    this.x = x;
    this.y = y;
}

}

这是基本的Snake类:

 public Snake() {        
    direction = UP;
    parts.add(new SnakePart(5, 6));
    parts.add(new SnakePart(5, 7));
    parts.add(new SnakePart(5, 8));
}

@Override
public void pause() {
    if(state == GameState.Running)
        state = GameState.Paused;

    if(world.gameOver) {
        Settings.addScore(world.score);
        Settings.save(game.getFileIO());
    }
}
07-08 20:39:50.341: E/AndroidRuntime(2957): FATAL EXCEPTION: Thread-4575

07-08 20:39:50.341:E / AndroidRuntime(2957):进程:com.badlogic.androidgames.mrnom,PID:2957 07-08 20:39:50.341:E / AndroidRuntime(2957):java.lang.IndexOutOfBoundsException:索引0无效,大小为0 07-08 20:39:50.341:E / AndroidRuntime(2957):at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 07-08 20:39:50.341:E / AndroidRuntime(2957):at java.util.ArrayList.get(ArrayList.java:308) 07-08 20:39:50.341:E / AndroidRuntime(2957):at com.badlogic.androidgames.mrnom.GameScreen.drawWorld(GameScreen.java:147) 07-08 20:39:50.341:E / AndroidRuntime(2957):at com.badlogic.androidgames.mrnom.GameScreen.present(GameScreen.java:131) 07-08 20:39:50.341:E / AndroidRuntime(2957):at com.badlogic.androidgames.framework.impl.AndroidFastRenderView.run(AndroidFastRenderView.java:40) 07-08 20:39:50.341:E / AndroidRuntime(2957):at java.lang.Thread.run(Thread.java:841)

2 个答案:

答案 0 :(得分:0)

变化:

public boolean checkStarved() {
    int len = parts.size();
    SnakePart head = parts.get(0);
    for(int i = 1; i < len; i++) {
        SnakePart part = parts.get(i);
        if(parts.isEmpty())
            return true;
    }        
    return false;
}

public boolean checkStarved() {
        return parts.isEmpty();
}

另外

parts.remove(parts.get(parts.size()-1));

可以缩减为

parts.remove(parts.size()-1);

答案 1 :(得分:0)

您是否尝试检查parts.isEmpty()或part.isEmpty()?我在for循环中注意到你得到了一部分然后从不使用变量。