我正在读取如下所示的事务文件:
1112, D
4444, A, Smith, Jones, 45000, 2, Shipping
6666, U, Jones
8900, A, Hill, Bill, 65000, 0, Accounting
当我尝试使用","令牌逐行读取文件时,程序在第一条记录处出现NoSuchElementException错误。我已经推断出我读取文件的条件导致了问题,尤其是在下面的 while 循环中。我尝试使用"if"语句并将条件设置为"while(st2.hasMoreTokens)"以及两者的组合,但错误仍然存在,我不确定为什么?提前感谢您的任何帮助。这是下面的代码:
Scanner transactionFile = new Scanner (new File(fileName2));
for (int i = 0; i < T_SIZE; i++) {
line2[i] = transactionFile.nextLine();
transaction[i] = new Transaction();
st2 = new StringTokenizer(line2[i], ", ");
transaction[i].setEmployeeID(Integer.parseInt(st2.nextToken()));
transaction[i].setAction(st2.nextToken());
while ((transaction[i].getAction() != "D")) {
transaction[i].setLastName(st2.nextToken());
transaction[i].setFirstName(st2.nextToken());
transaction[i].setSalary(Integer.parseInt(st2.nextToken()));
transaction[i].setNumOfDependants(Integer.parseInt(st2.nextToken()));
transaction[i].setDepartment(st2.nextToken());
}
}
看看你的while
循环。Java 中的 ==
运算符检查两个对象是否是相同的引用,这很少是一个值得依赖的好主意,并且可能导致此循环无限循环(或至少直到程序崩溃并出现异常)。从逻辑上讲,您要做的是检查两个字符串是否相等,即都包含字符串"D"
:
while (!transaction[i].getAction().equals("D"))
str.nextToken()
函数在被调用时访问一个元素并增加它的索引,因此您调用它比数组中的元素更多,因此它无法访问更高的索引并抛出 noSuchElementFound 异常