我在创建响应式机器人方面遇到了麻烦

时间:2017-04-08 14:12:30

标签: java eclipse

我一直在研究一种只响应某些事情的简单机器人,但如果它不理解,请告诉用户。我有两个问题。我正在使用切换功能,并希望将默认设置为机器人不理解。当我尝试启动程序时,我注意到机器人说它在我输入任何东西之前都没有立即理解。如何以默认情况仅在用户输入内容后发生的方式执行此操作。我尝试使用

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

2 个答案:

答案 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()才能关闭扫描程序,以免错误消失。