2013-03-27 64 views
0

我已经创建了大小为45的ArrayList的数组。我出于某种原因而收到ArrayOutOfBoundException。ArrayIndexOutOfBoundsException ArrayList的数组

这里就是我得到的错误:

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 
    } 

预先感谢您的帮助!

+3

where wordsByLen defined – 2013-03-27 13:39:36

+3

什么保证你'temp.length()'永远不会高于45?您正在阅读字符串,我可以看到 – 2013-03-27 13:40:13

+0

我在类的构造函数中定义了wordsByLen。 – mkjo0617 2013-03-27 13:43:15

回答

0

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

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

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

我也许会用Map<Integer,List<String>>来代替。你必须以类似的方式初始化它,但它会是一个更可靠的机制。对于可以录制单词的最大字符数,您不会有任意的限制。

+0

是的。我在构造函数中做了这个。在我这样做之前,我在同一行中得到了一个N​​ullPointerException。我只是没有包含代码,因为我不认为这是必要的。 – mkjo0617 2013-03-27 13:42:08

+0

当您只有能力存储最多45个字的单词时,您会发现59个字的单词。上述解决方案(使用Map)将会规避这个问题 – 2013-03-27 13:44:10

+0

我的任务是说限制必须是45.谢谢你的建议,但这对我不起作用。 – mkjo0617 2013-03-27 13:47:50