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

Java 为什么我的int[]数组循环超出范围?,java,arrays,for-loop,indexoutofboundsexception,Java,Arrays,For Loop,Indexoutofboundsexception,警告:一般来说,我对Java和编程非常陌生。我会尽量说清楚的 我试图获取一个简单的整数(inputnumber),将其转换为字符串(temp),创建一个新的int[]数组(numberarray),从最后一个数字开始循环这个int[]数组,并打印出该数字的名称 我很确定,由于Eclipse调试,从integer到String再到int[]array的转换是有效的,但我不明白为什么我会从Eclipse获得一条ArrayOutOfBounds消息,用于这样一个简单的for循环。任何关于我做错了什么的

警告:一般来说,我对Java和编程非常陌生。我会尽量说清楚的

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

我很确定,由于Eclipse调试,从integer到String再到int[]array的转换是有效的,但我不明白为什么我会从Eclipse获得一条ArrayOutOfBounds消息,用于这样一个简单的for循环。任何关于我做错了什么的线索都是值得赞赏的

    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");
    }

您正在以temp.length()启动循环。这不是一个有效的索引。也许您想要temp.length()-1?

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

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

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

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

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

您的
for
循环:

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

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

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

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

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

您的
for
循环:

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

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

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

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

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

谢谢你帮我解决这个非常明显的问题+1.如果您想点击所有元素,请确保执行i>=0而不是i>0,否则您将跳过第一个元素(请参阅我的帖子)。感谢您帮助我完成这一非常明显的任务+1.如果要点击所有元素,请确保执行i>=0而不是i>0,否则将跳过第一个元素(请参阅我的帖子)。