我在尝试使用JFileChooser扫描文本文件时遇到错误,将其添加到数组并将其中一个字符串解析为double,将两个解析为整数。是否与addEmployee方法将六个参数添加到arrayList这一事实有关?这是代码......
else if (e.getSource()==readButton){
JFileChooser fileChooser = new JFileChooser("src");
if (fileChooser.showOpenDialog(null)==JFileChooser.APPROVE_OPTION)
{
empFile=fileChooser.getSelectedFile();
}
Scanner scan = new Scanner("empFile");
while(scan.hasNext()){
String[] rowData = scan.next().split(":");
if(rowData.length == 5){
rowData[4] = null;
fName = rowData[0];
lName = rowData[1];
position2 = rowData[2];
firstParam = Double.parseDouble(rowData[3]);
secondParam = Integer.parseInt(rowData[4]);
empNum = Integer.parseInt(rowData[5]);
}
else{
fName = rowData[0];
lName = rowData[1];
position2 = rowData[2];
firstParam = Double.parseDouble(rowData[3]);
secondParam = Integer.parseInt(rowData[4]);
empNum = Integer.parseInt(rowData[5]);
}
if (position2.equals("Manager")){
c.addEmployee(fName, lName, position2, firstParam, 0, empNum);
}
else if(position2.equals("Sales")){
c.addEmployee(fName, lName, position2, firstParam, 0, empNum);
}
else{
c.addEmployee(fName, lName, position2, firstParam, secondParam, empNum);
}
}
}
约翰:史密斯:制造:6.75:120:444
贝:白色:管理器:1200.00:111
斯坦:粘糊糊:销售:10000.00:332
贝:布普:设计:12.50:50:244
答案 0 :(得分:2)
您正在尝试获取empNum = Integer.parseInt(rowData [5]);
行数据只有大小5表示索引0-4,这就是为什么ArrayIndexOutOfBoundsException正在获取
所以Initialize String [] rowData = new String [6];
答案 1 :(得分:1)
String[] rowData = new String[5]; // edited out of original post
rowData = scan.next().split(":");
第一个语句分配一个5 Strings
的数组,并将它们全部设置为null
。第二个语句只丢弃你刚刚分配的数组。 split
的结果将返回它找到的许多项目的数组,然后您将rowData
(一个引用)分配给一个数组,以引用新的阵列。旧的收集垃圾。因此,无法保证rowData
在此作业后将有5个元素。
如果split
没有返回足够的数组元素,您必须决定要执行的操作。您可以使用类似Arrays.copyOf
的内容,将split
结果放入某些rowData
元素中,而其他元素保持不变,但未分配的元素仍为null
,而你以后只会得到NullPointerException
几行。所以你在这里做了一些设计决定。
更多:您可能需要考虑使用Scanner
方法nextLine()
代替next()
。 next()
只返回一个标记,这意味着它将停留在空格字符处,这意味着如果有人被命名为你将会遇到问题" Mary Beth"或类似的东西。