2014-11-05 124 views
1

程序编译罚款,但是当我运行它,我得到一个错误,更具体地说是: java.lang.ArrayIndexOutOfBoundsException:1“java.lang.ArrayIndexOutOfBoundsException:1”错误当运行

它越来越上的错误:

String name = array[1]; 

我不知道为什么。

这是有问题的代码:

 infile = new Scanner(new FileReader("EmployeeData.TXT")); 
     while(infile.hasNext()){ 
      String line = infile.nextLine(); 
      String array[] = line.split(":"); 
      String name = array[1]; 
      String id = array[2]; 
      double salary = Double.parseDouble(array[3]); 
      Employee e; 
      if (array[0].equals("s")){ 
       e = new SalariedWorker(id, name, salary);} 
      else { 
       boolean overtime = Boolean.parseBoolean(array[4]); 
       if(overtime){ 
        int maxhu = Integer.parseInt(array[5]); 
        e = new HourlyWorker(id, name, salary, maxhu); 
       } 
       else{ 
        e = new HourlyWorker(id, name , salary); 
       } 
      } 
      company.add(e); 
     } 

以供参考,这是程序的其余部分:

它读取名为 “EmployeeData.TXT” 这个文本文件:

S  Washington,George  000001  125000 
H MacDonald,Ronald  386218  7.80 true 40 
H  Walton,Samuel   268517 8.21 false 
H Thomas,David   131313 9.45 true 38 
H Sanders,HarlandDavid 277651 8.72 false 
S Baron,James   368535 310236 
+0

几乎所有这些代码是不必要的。阅读如何制作[最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)。 – 2014-11-05 21:04:55

+0

通常人们发布的代码不够... – Grice 2014-11-05 21:08:05

+0

问题在于线条的解析。你使用':'符号。但是你没有在你的生产线上。数组只有1个元素。不是两个。 'array [1]'是数组的第二个元素。它编译得很好,但在运行时中断。 – 2014-11-05 21:08:51

回答

4

您正在分割":"和您的文本文件:

S  Washington,George  000001  125000 
H MacDonald,Ronald  386218  7.80 true 40 
H  Walton,Samuel   268517 8.21 false 
H Thomas,David   131313 9.45 true 38 
H Sanders,HarlandDavid 277651 8.72 false 
S Baron,James   368535 310236 

没有任何这样的字符。所以每个阵列的尺寸为1.

分割一个不存在的字符是没有意义的,这让我很好奇为什么你会选择使用":"。我自己,我会分裂的白色空间,"\\s+"

顺便说一句,这个问题是非常经得起调试或者与调试器或一些printlns:

while(infile.hasNext()){ 
    String line = infile.nextLine(); 
    System.out.println("Unsplit String: " + line); 
    String array[] = line.split(":"); 
    System.out.println("Split String: " + java.util.Arrays.toString(array)); 

无论哪种方式,将来你的时候有类似的问题,找出你的变量在错误的时间和地点所持有的东西,这往往会导致问题的根源,从而导致它的解决方案。

1

这是打破在这些线路上:

String line = infile.nextLine(); 
    String array[] = line.split(":"); 
    String name = array[1]; 
    String id = array[2]; 

您试图分配数组[1]来命名的价值......但数组不包含足够的元素。

所以假设你有line = "hey"并且你在线调用split,你的数组只有长度为1,因为没有要分割的“:”字符。

相关问题