public class Hobbits {
String name;
public static void main(String[] args){
Hobbits [] h = new Hobbits[3];
int z = 0;
while (z<4) {
z = z + 1;
h[z] = new Hobbits();
h[z].name = "Bilbo";
if (z == 1) {
h[z].name = "Frodo";
}
if (z == 2){
h[z].name = "Sam";
}
System.out.print(h[z].name+ " is a ");
System.out.println("good Hobbit name");
}
}
}
在运行时,该程序提供异常:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
答案 0 :(得分:3)
同意评论,你应该更具体一点,但是通过查看代码我可以看到你的循环从1运行到3并且你的数组的长度只有3(所以最高可用索引是2 )。
答案 1 :(得分:2)
H有h[0]
,h[1]
和h[2]
。你在那里要求h[3]
:)
答案 2 :(得分:2)
你的数组是3长。
1:数组索引从0开始。
2:当数组中的2位数最高时,您的代码会上升到索引4:
while (z<4) {
z = z + 1;
h[z] = new Hobbits();
...
}
答案 3 :(得分:1)
我猜你得到IndexOutOfBoundsException - 而且它,因为你在创建h [z]实例之前递增z。 只是在循环结束时递增。
答案 4 :(得分:1)
您需要将z = z + 1;
移至while循环的末尾
答案 5 :(得分:1)
为了您的兴趣,较短的版本可能如下所示。
String[] names = "Bilbo,Frodo,Sam".split(",");
Hobbits[] h = new Hobbits[names.length];
for(int i=0;i<names.length;i++) {
h[i] = new Hobbits();
h[i].name = names[i];
System.out.print(h[i].name+ " is a good Hobbit name");
}
Hobbits类是多余的,你可以得到相同的输出。
for(String name: "Bilbo,Frodo,Sam".split(","))
System.out.print(name+ " is a good Hobbit name");
答案 6 :(得分:1)
z=z+1
移至循环的结尾z<3
答案 7 :(得分:0)
异常是因为下标错误,但是有这样一个类有什么意义呢?我认为使用一个或两个构造函数的Hobbit类是一个更好的方法是一些访问器和一些增变器。然后,添加一个main或一个TryHobbit类与一个使用数组等技巧的main是有意义的。这将提供一个“更清洁”的学习示例。
答案 8 :(得分:0)
试试这个,它应该有效。
int z = -1
while (z < 2)