警告: 我对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)
答案 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--) {