[英]Java program runtime error
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
同意注释,您应该更加具体,但是通过查看代码,我可以看到您的循环从1到3运行,并且数组的长度仅为3(因此,最高可用索引为2)。
H具有h[0]
, h[1]
和h[2]
。 您正在那里要求h[3]
:)
您的数组长3。
1:数组索引从0开始。
2:当数组中的最高2时,代码将升至索引4:
while (z<4) {
z = z + 1;
h[z] = new Hobbits();
...
}
我猜您正在获取IndexOutOfBoundsException-并且它是因为在创建h [z]实例之前要递增z。 只需在循环末尾递增即可。
您需要移动z = z + 1;
到while循环的结尾
为了您的利益,较短的版本可能看起来像这样。
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");
}
类霍比特人是多余的,您将获得相同的输出。
for(String name: "Bilbo,Frodo,Sam".split(","))
System.out.print(name+ " is a good Hobbit name");
z=z+1
移至循环末尾 z<3
例外是由于下标错误,但是拥有此类的意义何在?
我认为拥有一个或两个构造函数,一些访问器和一些增变器的Hobbit类是一种更好的方法。 然后,添加一个main或一个TryHobbit类,并添加一个对数组等有用的main将会很有意义。这将提供一个“更简洁”的学习示例。
试试这个,它应该可以工作。
int z = -1
while (z < 2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.