为什么我的int[]数组循环越界了



警告: 我对Java和编程很陌生。我会尽量说清楚的

我正在尝试取一个简单整数(inputnumber),将其转换为字符串(temp),创建一个新的int[]数组(numberarray),并从最后一个数字开始循环此int[]数组,然后打印出数字的名称。

我很确定,由于Eclipse调试,从integer到String到int[]数组的转换是有效的,但我不明白为什么我会从Eclipse收到这样一个简单的for循环的ArrayOutOfBounds消息。任何关于我做错了什么的线索都将不胜感激。

    String temp = inputnumber.toString();
    int[] numberarray = new int[temp.length()];
    for (int i=0;i<temp.length();i++) {
        numberarray[i] = temp.charAt(i);
    }

    for (int i=temp.length();i>0;i--) {
        if (numberarray[i]==1) System.out.print("one.");
        if (numberarray[i]==2) System.out.print("two.");
        if (numberarray[i]==3) System.out.print("three.");
        if (numberarray[i]==4) System.out.print("four.");
        if (numberarray[i]==5) System.out.print("five.");
        if (numberarray[i]==6) System.out.print("six.");
        if (numberarray[i]==7) System.out.print("seven.");
        if (numberarray[i]==8) System.out.print("eight.");
        if (numberarray[i]==9) System.out.print("nine.");
        if (numberarray[i]==0) System.out.print("zero");
    }

我得到的Eclipse错误消息是:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at jt.Intermediate8.main(Intermediate8.java:44)

数组在Java中是0索引的。这意味着最后一个值位于索引NUMBER_OF_ELEMENTS-1

因此,在您的for循环中,您应该更改

int i=temp.length()     // this is last index + 1 (since we are starting from 0)

收件人:

int i=temp.length() - 1 // this is last index

此外,正如@brso05所说,不要忘记将循环结束条件更改为i>=0,因为向后的最后一个值将位于索引0。

您的for循环:

for (int i = temp.length(); i >= 0; i--)

您在temp.length()处开始循环。这不是一个有效的索引。也许你想要temp.length()-1?

您应该执行temp.length()-1。原因是数组以索引0而不是1开头,因此数组中的最后一个元素存储的长度为-1。如果有10个元素,那么0-9就是索引。如果您想命中所有元素,也可以将i>0更改为i>=0。

for (int i=(temp.length() - 1);i>=0;i--) {

最新更新