我一直在研究一种只响应某些事情的简单机器人,但如果它不理解,请告诉用户。我有两个问题。我正在使用切换功能,并希望将默认设置为机器人不理解。当我尝试启动程序时,我注意到机器人说它在我输入任何东西之前都没有立即理解。如何以默认情况仅在用户输入内容后发生的方式执行此操作。我尝试使用
if(!userInput=null) {
然后是switch语句,但是这给了我一个错误,因为它说它不是一个布尔值。
还有一个问题。变量userInput也存在问题。 Eclipse说"资源泄漏:userInput永远不会关闭"有谁知道如何解决这一问题?这是我目前的代码:
package com.robot;
import java.util.Scanner;
public class Robot {
public static void main(String[] args)
{
Scanner userInput = new Scanner(System.in);
switch(userInput.toString()) {
case "hello":
robotSay("hello");
break;
case "hi":
robotSay("hi");
break;
case "hey":
robotSay("hello");
break;
default:
robotSay("I do not understand");
break;
}
}
public static void robotSay(String string)
{
System.out.println(string);
}
}
答案 0 :(得分:3)
你应该使用
switch(userInput.nextLine()) {
.nextLine()
返回System.in
中的第一个未读行(并在必要时等待输入)。
.toString()
返回对象的String表示形式,在这种情况下它会锁定这样的东西:
java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false][need input=false][source closed=false][skipped=false][group separator=\.][decimal separator=\,][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q�\E][infinity string=\Q∞\E]
创建了ResourceLeak,因为您从不关闭InputStream(在Scanner内部),因此在您的程序完成之前,该资源将无法用于其他程序。
只做
userInput.close();
最后。
答案 1 :(得分:0)
你需要使用String input = userInput.next();在切换语句之前并使用开关(输入),以便扫描器在执行开关之前等待用户输入并读取它。
切换后,您需要使用userInput.close()才能关闭扫描程序,以免错误消失。