为什么我的int []数组循环超出范围?

时间:2014-09-23 17:06:50

标签: java arrays for-loop indexoutofboundsexception

警告: 我对Java和编程很新。我会尽量保持清醒。

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

我很确定由于Eclipse调试,从整数到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)

3 个答案:

答案 0 :(得分:7)

在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--)

答案 1 :(得分:3)

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

答案 2 :(得分:2)

你应该做temp.length() - 1.原因是数组以索引0而不是1开始,所以数组中的最后一个元素存储在长度为-1。如果有10个元素那么0- 9是你的索引。如果您想要点击所有元素,也可以将i&gt; 0更改为i&gt; = 0.

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