for循环和if语句错误发生

时间:2014-02-28 05:02:44

标签: java

我无法弄清楚为什么会收到错误:

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++;
        }
    }

之前已在班级中声明了所有变量。

2 个答案:

答案 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.
}