【问题标题】:array index out of bounds exception in a while loopwhile循环中的数组索引越界异常
【发布时间】:2013-01-30 03:59:34
【问题描述】:

我遇到了这个有趣的ArrayIndexOutofBounds 异常。

代码是这样的:

int m = 0;
while (scan.hasNextInt())
{
    intArray[m++] = scan.NextInt();
}

我只是将一堆整数扫描到一个数组中,但我总是收到ArrayIndexOutofBounds 错误。我以为我的int m 已经初始化为零了?

谢谢

【问题讨论】:

  • 你初始化 intArray 了吗?
  • 是的,我确实像这样初始化了我的数组:int[] intArray = new int[inputString.length()]; 其中 inputString 是我正在扫描整数的字符串。
  • 在定义数组之前System.out.println(inputString.length()); 会得到什么?
  • 附注我假设你的意思是 nextInt 因为 NextInt 不会编译。

标签: java arrays exception


【解决方案1】:

inputString.length() 返回字符串中的字符数。它不一定对应于字符串中的数字数量。您需要在while 语句中添加另一个条件,以确保m 不会大于intArray.length。此外,您可能希望使用调试器单步执行代码,以确定数组何时用完空间。

由于 java 数组是固定大小的,如果您不知道输入的大小,您应该改用 ArrayList<Integer> 来存储您的输入。

【讨论】:

  • 很好的答案!我从没想过使用 ArrayList;但这似乎比一个数组更好(而且更容易)!
  • 好点肯定,但我保证数字的数量小于字符串中的字符数量;)考虑一下。 (很高兴知道数组失败的原因,没有人知道它的底部)。
【解决方案2】:
  1. 数组中是否有任何元素开始?

  2. 在循环的未来迭代中,m 不为零,因为您在循环内递增它。

【讨论】:

  • 不,我的数组最初是空的。是的,我知道第一次迭代后 m 不再为零。
  • 如果您的数组最初为空,则数组[0] 超出范围。 array[0] 是零元素数组的第一个元素超出范围。
【解决方案3】:

ArrayIndexOutofBounds 意味着您的数组不足以容纳您放入其中的值的数量。你在哪里初始化数组 intArray?

如果您不知道扫描仪预先有多少值(我认为是这种情况),您可能希望使用 ArrayList 来代替。

这样的事情应该可以工作..

List<Integer> intArray = new ArrayList<Integer>();
while (scan.hasNextInt())
{
    intArray.add(scan.NextInt());
}

如果你需要一个数组而不是 ArrayLIst 的最终结果,你可以使用

Integer[] newArray = (Integer[])intArray.toArray();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 2016-08-03
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多