数组索引越界错误Java
因此,当我运行这个方法时,我不断地得到数组索引越界错误。我对这个错误很熟悉,但我不明白为什么会在这个例子中发生。代码如下:数组索引越界错误Java,java,arrays,Java,Arrays,因此,当我运行这个方法时,我不断地得到数组索引越界错误。我对这个错误很熟悉,但我不明白为什么会在这个例子中发生。代码如下: public void setFrequencies() { List<Word> dupeWordList; dupeWordList = wordList; dupeWordList.removeAll(Collections.singleton(null)); Collections.sor
public void setFrequencies() {
List<Word> dupeWordList;
dupeWordList = wordList;
dupeWordList.removeAll(Collections.singleton(null));
Collections.sort(dupeWordList);
for(int i = 0; i < dupeWordList.size(); i++) {
int count = 1;
Word tempWord = dupeWordList.get(i);
tempWord.setFrequency(count);
Word nextWord = dupeWordList.get(dupeWordList.size() - 1);
if(i+1 < dupeWordList.size() - 1) {
nextWord = dupeWordList.get(i+1);
}
while(tempWord.getValue() == nextWord.getValue()) {
count++;
i++;
tempWord.setFrequency(count);
for(int e = 0; e < count - 1; e++) {
Word middleWord = new Word();
if((i-count+1)+1+e < dupeWordList.size() - 1) {
middleWord = dupeWordList.get((i-count+1)+1+e);
}
middleWord.setFrequency(count);
}
if(i+1 < dupeWordList.size() - 1) {
nextWord = dupeWordList.get(i+1);
} else {
nextWord.setValue("the");
}
}
}
List<Word> reSortedList = wordList;
Word fillWord = new Word();
fillWord.setFrequency(0);
fillWord.setValue(null);
Collections.fill(reSortedList, fillWord);
for(int i = 0; i < dupeWordList.size(); i++) {
Word word = dupeWordList.get(i);
int wordOrder = word.getOrigOrder();
reSortedList.set(wordOrder, word);
}
setWordList(reSortedList);
}
public void setFrequencies(){
列表dupeWordList;
dupeWordList=单词列表;
removeAll(Collections.singleton(null));
Collections.sort(dupeWordList);
对于(int i=0;i
出现问题的行是if语句中包含
nextWord=dupeWordList.get(i+1)
的行。然而,如果你看上面,你可以看到我有完全相同的声明上面,但它不会产生一个错误。请帮忙 在for循环行和while循环中都在增加索引i。这听起来有点“不不”。你确定你在那里做什么吗?我有一种直觉认为你不应该那样做。我唯一能想到的是,你正在运行某种有限循环,其中你的条件是,而(tempWord.getValue()==nextWord.getValue()){
。也许两个值都可以停留在“The”
如果发生这种情况,那么变量i
将增加到超过Integer.MAX_VALUE
的点,并开始具有负值
如果发生这种情况,则条件If(i+1
将变为true,但是i
的值对于列表无效,并将抛出越界异常
(顺便说一句,你真的应该使用
equals()
来比较字符串,而不是=
)我想你指的是这段代码
if(i+1 < dupeWordList.size() - 1) {
nextWord = dupeWordList.get(i+1);
}
if(i+1
因此,dupeWordList.size()-1
是您可以引用的最后一个索引位置。您引用的是i+1
,它小于最后一个索引(因为if
语句条件)。因此,您尝试获取最后一个单词之前的单词
根据,如果出现以下情况,您将获得索引AutofBoundsException
:
IndexOutOfBoundsException-如果索引超出范围(索引<0||
索引>=大小()
既然if语句保证索引不是>=size(),那么唯一的可能就是索引<0。您是否尝试过逐行进入代码?从您的代码中,我得到的印象是您认为dupeWordList是wordList的副本(不是)?我试图使其重复,是的。发生此错误的行不清楚:您有nextWord=dupeWordList.get(I+1);
在一个条件块中多次出现。用注释向我们展示它出现的位置。此外,正如sstan所建议的那样,您应该使用调试器一步一步地检查代码,并逐行查看i
在某个点上发生的情况。当您一步一步的时候,您是否进行了一个会超出索引边界的get
调用?(如果您知道问题发生在哪个迭代中,您可以设置断点条件,或者您可以临时打印i
,以查看您在迭代中取得的进展。)发布你的堆栈跟踪日志。我知道在代码中,我需要根据我在其中的内容进行更改,但我可能采取了错误的方法…?这是导致错误的原因,还是仅仅是一些看起来不对劲的东西。我发现了,这是一个挂在“the”上的问题.我把那行改成了break,然后从那个里开始就并没有错误了。用==代替了.equals(),我才意识到。我习惯了c#,所以这就是我得到它的原因。