是什么导致这个ArrayIndexOutOfBoundsException与一个简单的“for”?

时间:2011-12-01 10:27:03

标签: java

有人能告诉我我的数组代码有什么问题吗?输出正确,但输出底部显示一些错误。

public static void main(String[] args) {
    // TODO Auto-generated method stub

    int[] number = {1,2,3,4,5};

    System.out.println("Number in ascending order: ");
    for (int x=0; x < number.length; ++x)
        System.out.println(number[x]);

    lasttofirst(number);

}

public static void lasttofirst(int[] number)
{
    System.out.println("Number in descending order: ");
    for (int x=4; x<number.length; --x)
        System.out.println(number [x]+ " ");
}

4 个答案:

答案 0 :(得分:3)

问题在于以下逻辑

for (int x=4; x<number.length; --x)

当最初x = 4时,它满足条件x<number.length,因为4 <5 然后x值变为3,对于下一次出现3&lt; 5也满足 ... .. 当x值变为0然后0 出现问题现在x值变为-1 然后-1number [-1]给出 ArrayIndexOutOfBoundsException 该数组包含从第0位到第0位的数据元素-1位置数

您可以使用以下逻辑

代替该逻辑
for (int x=number.length-1; x>=0; --x)
            System.out.println("Index..."+x+"..."+number [x]+ " ");
    }

答案 1 :(得分:1)

这里有一个错误:

for (int x=4; x<number.length; --x)

x<number.length应该阅读x >= 0

答案 2 :(得分:1)

您错误地输入了for循环

如果要向后打印表格元素,则必须从最后开始(因此,长度为1,因为我们从0开始索引),直到x小于0。

所以它应该是:

for(int i=number.length-1; x>=0; --x){
   System.out.println(number[x]); // <-- also you dont need +" ", as printLN inserts new line

}

答案 3 :(得分:0)

我不知道你真正理解你想用

实现的目标
lastoffirst(number)

但你的问题就在这里 -

for (int x=4; x<number.length; --x) 

我可以看到number.length的值是5并且你从一个小于5的数字开始去除你的循环变量。在一个阶段它试图打印数字[-1]这是不可能的。这就是为什么你会收到这个错误。

干杯。