0

我被卡住了,无法弄清楚为什么我的输入扫描仪挂起,等待新的输入。谁能看到我错过了什么或没有做什么?我知道这很愚蠢,谢谢!

while (more == true){       
str = "";
val = "";

System.out.println("Enter a Constructor argument type : ");
try {
    str  = input.nextLine();
} catch (Exception e) {
    more = false; input.close();
}

if ( str.isEmpty() || str.equals("") || (str == null) ) {
more = false;
}
else{
    arguments.add(str);

    System.out.println("Enter it's value : ");
    try {
      val  = input.nextLine();
    } catch (Exception e) {
      more = false; 
    }
      if ( val.equals("") || (val == null) || val.isEmpty() ) {
        more = false;
      }
      else{
        values.add(val);
      }
    }
  }
4

1 回答 1

0

if ( str.isEmpty() || str.equals("") || (str == null) )

这条线没有意义。如果你想防御性地编程,总是首先检查对象是否为空。如果 str 为空,您的行将抛出 NPE,而不仅仅是将变量 more 设置为 false。我的建议如何更改此行: if (str == null || str.isEmpty() || str.equals("")) 或仅使用 if(StringUtils.isEmpty(str))

出于同样的原因,“if ( val.equals("") || (val == null) || val.isEmpty() )” 行也可以只替换为“if(StringUtils.isEmpty(val))” .

如果要在控制台中结束输入,请尝试为 EOF 传递“Ctrl+Z”组合。

于 2013-11-07T00:36:05.670 回答