程序编译很好,但是当我运行它时,我得到一个错误,更具体地说:
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 :(得分: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 :(得分:1)
正在打破这些方面:
String line = infile.nextLine();
String array[] = line.split(":");
String name = array[1];
String id = array[2];
您正在尝试将array [1]的值赋给name ...但是数组不包含足够的元素。
所以说你有line = "hey"
并且你在线调用split,你的数组只有长度为1,因为没有":"分裂的角色。