Java程序运行时错误

时间:2011-01-15 15:51:31

标签: java

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

9 个答案:

答案 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)

  1. z=z+1移至循环的结尾
  2. 将while循环的条件更改为z<3

答案 7 :(得分:0)

异常是因为下标错误,但是有这样一个类有什么意义呢?我认为使用一个或两个构造函数的Hobbit类是一个更好的方法是一些访问器和一些增变器。然后,添加一个main或一个TryHobbit类与一个使用数组等技巧的main是有意义的。这将提供一个“更清洁”的学习示例。

答案 8 :(得分:0)

试试这个,它应该有效。

int  z  =  -1
while   (z  < 2)