0

我正在用 Java 编写代码作为 Minecraft 服务器的插件,但逻辑原则本质上是通用的。

public void doReviewMember(CommandSender playerSent) {
    if (!reviewsMember.isEmpty()) {
        Review doThis = null;

        ArrayList<Review> players = new ArrayList<Review>();
        ArrayList<Review> playersVIP = new ArrayList<Review>();
        ArrayList<Review> playersVIPplus = new ArrayList<Review>();

        for (int c1 = 0; c1 < reviewsMember.size(); c1++) {
            if  (Bukkit.getPlayer(reviewsMember.get(c1).getName()).hasPermission("reviewplugin.vipplus"))
                playersVIPplus.add(reviewsMember.get(c1));
            else if (Bukkit.getPlayer(reviewsMember.get(c1).getName()).hasPermission("reviewplugin.vip"))
                playersVIP.add(reviewsMember.get(c1));
            else players.add(reviewsMember.get(c1));
        }

        if (playersVIPplus.size() > 0)
            doThis = playersVIPplus.get(0);
        else if (playersVIP.size() > 0)
            doThis = playersVIP.get(0);
        else doThis = players.get(0);

        Bukkit.getPlayer(playerSent.getName()).sendMessage("§4[§6ReviewPlugin§4] §eThis review is for §b" + doThis.getName());
        Bukkit.getPlayer(playerSent.getName()).teleport(doThis.getLocation());
        reviewsMember.remove(doThis);
        if (reviewsMember.size() > 1)
            Bukkit.getPlayer(playerSent.getName()).sendMessage("§4[§6ReviewPlugin§4] §eThere are " + reviewsMember.size() + " member reviews left to do.");
        else if (reviewsMember.size() == 1)
            Bukkit.getPlayer(playerSent.getName()).sendMessage("§4[§6ReviewPlugin§4] §eThere is " + reviewsMember.size() + " member review left to do.");
        else
            Bukkit.getPlayer(playerSent.getName()).sendMessage("§4[§6ReviewPlugin§4] §eThere are no more Member reviews to do at this time!");
    }
    else {
        Bukkit.getPlayer(playerSent.getName()).sendMessage("§4[§6ReviewPlugin§4] §eThere are no more Member reviews to do at this time!");
    }
}

索引越界错误发生在 for 循环中,所以我不知道我哪里出错了。这是在 Windows 8 机器上测试的,没有错误,但是当实现到 Linux 时,每次都失败,索引超出范围错误。

4

1 回答 1

0

除非某些后台线程在循环中间修改了数组,否则上述代码不会失败。这很可能是您的问题的原因。

于 2013-10-06T21:09:21.870 回答