Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组索引越界错误Java_Java_Arrays - Fatal编程技术网

数组索引越界错误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#,所以这就是我得到它的原因。