Java - 获取最高整数的IndexOutOfBoundsException

时间:2015-05-29 12:30:35

标签: java loops

我正在尝试创建一个得分系统并获得最高分,但是我的方法会生成一个IndexOutOfBoundsException,但是我无法找到arraylist界限中的某些人可以帮助我吗?

代码:

 public static Player getBestScore(Arena arena) {
    System.out.println(arena.getAPlayers().size());
    System.out.println(arena.getAPlayers().get(1).toString());
    int i = 0;
    Player player = null;
    for(int p = 0; p != arena.getAPlayers().size() - 1; i++) {
        System.out.println(arena.getAPlayers().get(i).toString());
        org.bukkit.entity.Player pla = arena.players.get(i);
        if(getArenaPlayer(pla).getScore() > i) {
            i = getArenaPlayer(pla).getScore();
            player = getArenaPlayer(pla);
        }
    }
    return player;
}

该方法是静态的,因为其他方法和变量也是静态的

3 个答案:

答案 0 :(得分:1)

您错误地使用了ip! 在循环中,将i设置为某个高分,这可能大于数组的大小,因此也就是IndexOutOfBoundsException。

public static Player getBestScore(Arena arena) {
    System.out.println(arena.getAPlayers().size());
    System.out.println(arena.getAPlayers().get(1).toString());
    int i = 0;
    Player player = null;

    // index of for loop is p
    for(int p = 0; p != arena.getAPlayers().size() - 1; i++) {

        System.out.println(arena.getAPlayers().get(p).toString());
        org.bukkit.entity.Player pla = arena.players.get(p);

        // If player's score is higher than current highscore(i)
        if(getArenaPlayer(pla).getScore() > i) {

            // Set current highscore(i) to this player's score
            i = getArenaPlayer(pla).getScore();
            player = getArenaPlayer(pla);
        }
    }
    return player;
}

这就是为什么你应该更好地命名你的变量!
使用highscore代替i,可能使用index代替p会减少混乱!

答案 1 :(得分:1)

少数事情:

  • 您不需要在循环外声明i
  • 您不需要p变量
  • 您不能使用!=来检查for-loop(通常)

此:

for(int p = 0; p != arena.getAPlayers().size() - 1; i++) {
//      ^      ^                                    ^ different
//               ^ != WROOOONG!!!

不是一个好的for循环定义。为了避免IndexOutOfBoundsException以这种方式使用它

for(int i = 0; i < arena.getAPlayers().size(); i++) {

答案 2 :(得分:0)

使用:

for(int p = 0; p < arena.getAPlayers().size(); p++) {

而不是

for(int p = 0; p != arena.getAPlayers().size() - 1; i++) {