【问题标题】:Java index out of bounds errorJava 索引越界错误
【发布时间】:2013-10-13 09:01:25
【问题描述】:

我正在用 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 中实现时,每次都失败,索引超出范围错误。

【问题讨论】:

  • 你有堆栈跟踪吗?错误可能更深。
  • 您是否插入了打印语句以显示变量在各个点的状态并准确查看错误发生的位置?
  • 无关提示:尝试通过提取一些局部变量来使您的代码更易于使用和更快:Review review = reviewsMember.get(c1); Player player = Bukkit.getPlayer(review.getName());

标签: java runtime-error indexoutofboundsexception


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-06-06
    • 2015-03-22
    • 2022-01-13
    • 2015-01-10
    • 2014-01-27
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多