2

我在 Eclipse 中有一个 JUnit 测试(我用 Junit 3 和 JUnit 4 尝试过),它检查一个解析文件的方法但是由于某种我不知道的原因,当我使用它时它会冻结或挂起:

while(scanner.hasNextLine() && scanner !=null){
   if(scanner.hasNext()){ do something }
}

但是当我使用以下它工作正常:

while(scanner.hasNextLine() && scanner !=null && scanner.hasNext() ){
   do something 
}

“做某事”中的代码除了将scanner.next()分配给变量之外没有特别之处,System.out.print()在这两种情况下实际上都可以正常输出。这些不是在做同样的事情吗?这是一个合理的错误(如果是,请解释原因)还是一个愚蠢的错误?

4

1 回答 1

3

首先,在取消引用之前检查 null。改变

while(scanner.hasNextLine() && scanner !=null){
   if(scanner.hasNext()){ do something }
}

对此:

while(scanner !=null && scanner.hasNextLine()){
   if(scanner.hasNext()){ do something }
}

正如您在示例代码中所写的那样,您会发现空扫描仪实例,但 (scanner != null) 无关紧要。相反,您会通过 NullPointerException 找到空扫描器。

接下来,您在问题中提到“将scanner.next() 分配给变量”。显示一些代码。您必须为每个呼叫准确hasNextLine拨打一个nextLine电话,并且您必须hasNext为每个呼叫准确拨打一个next电话。看来您可能正在做这样的事情:

while (blam.hasNext())
{
    blah = blam.next();
    hoot = blam.next();
}

这是完全错误的。第二次下一个电话将导致问题。

于 2013-03-22T17:17:14.980 回答