运行时出现拆分“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
# 1 楼答案
您正在
":"
上拆分,您的文本文件:没有这种性格。所以每个数组的大小都是1
在一个不存在的角色上分裂是没有意义的,这让我很好奇为什么你会选择使用
":"
。我自己,我会在空白处分开,"\\s+"
顺便说一句,这个问题很容易通过调试器或一些println进行调试:
不管怎样,将来当你遇到类似的问题时,找出你的变量在错误发生的时间和地点是什么,这通常会引导你找到问题的根源,从而找到问题的解决方案
# 2 楼答案
它打破了这些界限:
您正在尝试将数组[1]的值分配给name。。。但是数组中没有足够的元素
假设你有
line = "hey"
并且你在第行调用split,你的数组的长度将只有1,因为没有“:”字符可以拆分