繁体   English   中英

如何解决越界异常错误?

[英]How to solve an out of bounds exception error?

我昨天发布了一个问题,关于我正在编写的一些代码,并且无法正确地使用类实现接口。 感谢用户在这里得到了很多帮助,这已经得到了解决,所以我想我可能会再次得到帮助。

我现在遇到了一个超出范围的异常错误,并且在我的生活中,我看不出问题是什么,虽然我对java很新。

应用程序显示钢琴键,允许用户单击它们,并保存单击它们的顺序和特定声音的音符的midicode。 然后,当用户点击播放时,它会按照保存笔记的顺序重新调出曲调。 我使用数组列表来存储音符,然后想要在用户单击播放时调用它们,这会调用“start”方法,然后重复调用“getNextNote”方法直到没有其他音符。 但是,每当我点击播放时,我都会遇到一个越界异常错误。 以下是我目前的代码;

import java.util.*;
import mvcchords.*;

public class MyNoteStore implements NoteStore {

public ArrayList<Integer> Notes = new ArrayList<Integer>();
int k;

public void noteAdded(int midicode) {
    Notes.add(midicode);
}

public boolean hasNextNote() {
    if(Notes.get(k) != null)
        return true;
    else
        return false;
}

public int getNextNote() {

        if(hasNextNote() == true)
            return Notes.get(k);
        else
            return 0;
    }

public void start(int sortOrder) {

    for(k = 0; k < Notes.size(); k++){
    hasNextNote();
    getNextNote();
    }
  }
}

下面是我尝试点击播放时出现的3个音符的错误(尽管错误是相同的,无论我存储了多少音符,只是最后的数字等于我选择了多少音符):

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3

任何帮助都会很棒,谢谢你提前:)

我也会尽力提供所需的任何额外信息:)

编辑:将for循环更改为

 for(k = 0; k < Notes.size(); k++)

并且仍然会出现同样的错误:(

您正在检查<= size()而不是<size(),这意味着如果大小为2,您将查找索引2(而有效指标为0和1)。

用以下代码替换您的代码:

public class MyNoteStore implements NoteStore {

private List<Integer> notes = new ArrayList<Integer>();

public void noteAdded(int midicode) {
    notes.add(midicode);
}

public boolean hasNextNote() {
   // do you need this method?
}

public int getNextNote() {
   // do you need this method?
}
public void start(int sortOrder) {
    for(Integer note : notes){
       // "note" var contains each note from notes
    }
  }
}

你从你的收藏中读了太多东西:

for(k = 0; k <= Notes.size(); k++) ...

比较应该是k < Notes.size(); 代替。 该集合是0索引的,因此最后一个条目的索引size-1而不是size

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM