繁体   English   中英

Java程序运行时错误

[英]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");
  1. z=z+1移至循环末尾
  2. 将while循环的条件更改为z<3

例外是由于下标错误,但是拥有此类的意义何在?
我认为拥有一个或两个构造函数,一些访问器和一些增变器的Hobbit类是一种更好的方法。 然后,添加一个main或一个TryHobbit类,并添加一个对数组等有用的main将会很有意义。这将提供一个“更简洁”的学习示例。

试试这个,它应该可以工作。

int  z  =  -1
while   (z  < 2)   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM