【问题标题】:ArrayIndexOutOfBoundsException Array of ArrayListsArrayIndexOutOfBoundsException ArrayLists 数组
【发布时间】:2013-03-27 13:37:59
【问题描述】:

我创建了一个大小为 45 的数组列表。由于某种原因,我收到了 ArrayOutOfBoundException。

这是我得到错误的地方:

    String temp;
    Scanner sc = new Scanner(str1);
    while(sc.hasNext())
    {
        temp = sc.next();
        int len = temp.length();
        if(len > 0)
            wordsByLen[len - 1].add(temp);  //throwing the error here with exception of 59
    }

提前感谢您的帮助!

【问题讨论】:

  • wordsByLen 定义在哪里
  • 什么可以保证temp.length() 永远不会高于 45?您正在阅读我能看到的字符串
  • 我在类的构造函数中定义了wordsByLen。
  • 我可以看到您假设 temp.length() 将返回 0 到 44 之间的值。这是真的吗?这可能会导致问题。
  • 尝试在if 条件之前打印len 的值,看看你得到了什么值

标签: java arrays arraylist indexoutofboundsexception


【解决方案1】:

您是否正确初始化了数组wordsByLen?我怀疑不是。

我认为您需要做的是用正确的长度初始化数组,然后为每个可能的字长创建一个集合。例如(伪代码)

for (int i = 0; i < MAXWORDLENGTH; i++) {
   wordsByLen[i] = new ArrayList<String>();
}

我可能会改用Map&lt;Integer,List&lt;String&gt;&gt;。您必须以类似的方式对其进行初始化,但这将是一种更可靠的机制。您不会对可以记录单词的最大字符数有任意限制。

【讨论】:

  • 是的。我在构造函数中做到了。在我这样做之前,我在同一行得到了 NullPointerException。我只是没有包含代码,因为我认为没有必要。
  • 当您只能存储最多 45 个字符的单词的信息时,您会发现 59 个字符的单词。上述解决方案(使用地图)将规避这个问题
  • 我的作业说限制必须是 45。谢谢你的建议,但这对我不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多