Java Out of Bounds错误

时间:2014-08-02 04:52:54

标签: java

当我输入1条记录并选择1.添加记录时,它始终有错误。当我输入2条记录时,我只能输入1条记录,当我选择1.再次添加记录时,它会显示OutofBounds。我该如何解决这个错误?

public static int recno=0, recsize, choice, i=0;

public static void main (String args[]) throws IOException{
  System.out.print("Enter Number of Records");
  recsize = Integer.parseInt(reader.readLine());
  String EmpNo[] = new String[recsize];

  display_menu(EmpNo,recno);
}

public static void add_Rec(String EmpNo[],  int recno) throws IOException{
  ++recno;
  EmpNo[recno]= "EMP-"+ recno;
  System.out.print("Employee Number: " + EmpNo[recno]);

  System.out.print("\nEmployee Name: ");

  display_menu(EmpNo,recno);
}


public static void display_menu(String EmpNo[],  int recno) throws IOException{
  System.out.println("Main Menu");
  System.out.println("1. Add record");
  System.out.println("Enter Your Choice");
  choice = Integer.parseInt(reader.readLine());
  if (choice==1){
    add_Rec(EmpNo,recno);
  }
}

3 个答案:

答案 0 :(得分:1)

您应该替换以下内容:

++recno;
EmpNo[recno] = "EMP-" + recno;

使用:

if (recno < recsize) {
    EmpNo[recno++] = "EMP-" + recno;
    // ...
}

答案 1 :(得分:1)

您已将recno初始化为零。

然后当你这样做

++recno;

recno值增加到1。

但是在java数组索引中必须以0

开头

++recno;更改为recno++;

正如上面的答案所说的还要检查索引值是否应该小于数组的大小,如此

if(recno<recsize) {
   EmpNo[recno] = "EMP-" + recno;
   System.out.print("Employee Number: " + EmpNo[recno]);
   System.out.print("\nEmployee Name: ");
    display_menu(EmpNo, recno);
 }

答案 2 :(得分:0)

OutofBounds Exception即将发布,因为Java数组索引必须从0开始,其他人已经提到过。

但是我也有兴趣知道你是递归地调用display_menu(EmpNo, recno)但是没有条件它会结束。

即使你能够解决OutofBounds异常,你也会以calling display_menu(EmpNo, recno递归方式陷入StackOverflowError