Java异常:Java.lang.ArrayIndexOutOfBoundsException

Java异常:Java.lang.ArrayIndexOutOfBoundsException,java,exception,Java,Exception,因此,对于我的Ap计算机科学课程,我的一个项目不断获得java.lang.ArrayIndexOutOfBoundsException:390000这是一个声音反向文件 代码如下: import sounds.APSoundClip; import sounds.Sample; public class ReverseSound { public static void main(String[] args) { APSoundClip clip = new A

因此,对于我的Ap计算机科学课程,我的一个项目不断获得
java.lang.ArrayIndexOutOfBoundsException
:390000这是一个声音反向文件

代码如下:

import sounds.APSoundClip;
import sounds.Sample;

public class ReverseSound {   

    public static void main(String[] args) {
        APSoundClip clip = new APSoundClip("money.wav");
        APSoundClip newClip = clip.clone();
        int pos = clip.getLength();
        int cloned = 0;

        for(Sample clipSample : clip) {  
            clip.getSample(pos); //error is here
            int newValue = clipSample.getValue();
            newClip.getSample(cloned).setValue(newValue);
            pos--;
            cloned++;
        }
        newClip.draw();
    }
}
这似乎是一个“传统”错误-您使用
int pos=clip.getLength()初始化
pos


然后在第一次迭代中执行
clip.getSample(pos)-最后一个元素位于索引
clip.getLength()-1
。您正试图访问位于位置
clip.getLength()
的元素,这就是为什么会出现索引越界错误。

Java数组以索引为零开始,因此,它们的最后一个索引将比其长度小一个。在您的情况下,假设
clip.getLength()
是数组中的最后一个元素,但是,当您查看数组的解剖结构时,它实际上是
clip.getLength()-1

您能显示堆栈跟踪吗?嗯,它看起来像是您的类之一。。。你能添加它的代码吗?或者,如果太长,字段、构造函数和
getSample
方法?确切地说,java中的数组从零开始。最后一个元素是array[array.length-1]。