我无法弄清楚为什么会收到错误:
java.util.NoSuchElementException null(in java.util.Scanner)
在我的方法中:
public void processTransactions(Scanner transFile){
while (transFile.hasNext()){
for(i = 0; i < ids.length; i++){
finalInventory[i] = startingInventory[i];
if(ids[i] == transFile.next()){
finalInventory[i] += transFile.nextInt();
}
}
}
}
这是我的建议员:
public SoftDrinkInventory(Scanner inventoryFile) {
initializeString(names);
initializeString(ids);
initializeInt(startingInventory);
initializeInt(finalInventory);
initializeInt(transactionCounts);
while (inventoryFile.hasNext()){
names[i] = inventoryFile.next();
ids[i] = inventoryFile.next();
startingInventory[i] = inventoryFile.nextInt();
i++;
}
}
之前已在班级中声明了所有变量。
答案 0 :(得分:2)
我猜一点,但我认为你的代码应该是这个。
public void processTransactions(Scanner transFile){
while (transFile.hasNext()){
String key = transFile.next();
int value = transFile.nextInt();
for(i = 0; i < ids.length; i++){
finalInventory[i] = startingInventory[i];
if(ids[i].equals(key)){
finalInventory[i] += value;
}
}
}
}
您只想在next()
循环的每次迭代中执行nextInt()
和while
一次。目前,您在next()
循环的每次迭代中重复for
,这实际上不是您想要的。
请注意,这不是解决问题的最有效方法,但将带走您的错误。
另外,您尚未指定ids
的类型,但我认为它是String[]
。
答案 1 :(得分:1)
您正在呼叫hasNext()
,但正在使用nextInt()
...一种解决方案是使用,
while (transFile.hasNextInt()){
// As before.
}
另一个是跳过任何不是int
的东西,也许就是这样
while (transFile.hasNext()){
if (!transFile.hasNextInt()) {
transFile.next();
continue;
}
// As before.
}