【问题标题】:IndexOutOfBoundsException for arraylist数组列表的 IndexOutOfBoundsException
【发布时间】:2017-01-13 11:10:28
【问题描述】:

有人能解释一下为什么这段代码会抛出IndexOutOfBoundsException吗?

public static Hull merging(Hull HullA, Hull HullB) {
    Hull finalHull = new Hull();
    int i=0;
    int j=0;

    if (HullA.list.get(i) >= HullB.list.get(j))
    {
        finalHull.list.add(HullA.list.get(i));
        i++;
    }
    else 
    {
        finalHull.list.add(HullB.list.get(j));
        j++;
    }

    return finalHull;
}

我该如何解决?

【问题讨论】:

  • 作为旁注,这个变量命名使得即使是那个小方法也难以阅读。
  • 你试过用调试器找出来吗?
  • @Jens 是的,我做到了,它说 if (HullA.list.get(i) >= HullB.list.get(j)) 但我不知道如何解决这个问题即使在谷歌搜索并为列表设置值后,如果列表为空,似乎也不起作用
  • @KevinEsche 那么命名变量的好方法是什么?请建议。
  • 检查列表是否为空。您得到了异常,因为如果列表为空,您将无法获取索引 0 处的元素

标签: java algorithm merge


【解决方案1】:

您正在直接比较列表的值并递增计数器。 在比较之前应该检查两个列表的大小。

HullA、HullB 的大小可能小于您尝试检索的索引。

HullA.list.get(i) 如果 HullA.size =4 并且您正在尝试检索 HullA.get(5) 那么它会抛出 Araayindexoutofbound 错误。

【讨论】:

  • i 和 j 的值只能是 0。
【解决方案2】:

此方法将始终将 HullA 或 HullB 的第一个元素(索引 = 0)添加到 finalHull 列表中。 i++j++ 的增量线毫无意义。

此外,当且仅当 HullAHullB 的大小为 0 时,该代码才会抛出 IndexOutOfBound Exception

附:变量名以小写字母开头。

附:不要使用计数器(i++,j++),如果代码只被处理一次,然后计数器将被再次初始化。

附:不要在对象中静态使用列表。像这样使用:finalHull.getList().add()

【讨论】:

    猜你喜欢
    • 2015-07-20
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多