Java I';我在创造一个反应灵敏的机器人方面遇到了麻烦

Java I';我在创造一个反应灵敏的机器人方面遇到了麻烦,java,eclipse,Java,Eclipse,我一直在研究一个简单的机器人,它只对某些事情做出反应,但如果它不明白,就告诉用户。我有两个问题。我正在为此使用开关功能,并希望将默认设置为机器人不理解。当我试着启动程序时,我注意到机器人说,在我输入任何内容之前,它无法立即理解。我将如何做到这一点,使默认情况仅在用户输入某些内容后发生。我试着用 if(!userInput=null) { 接下来是switch语句,但这给了我一个错误,因为它说它不是布尔值 还有一个问题。变量userInput也有问题。Eclipse说“资源泄漏:userInpu

我一直在研究一个简单的机器人,它只对某些事情做出反应,但如果它不明白,就告诉用户。我有两个问题。我正在为此使用开关功能,并希望将默认设置为机器人不理解。当我试着启动程序时,我注意到机器人说,在我输入任何内容之前,它无法立即理解。我将如何做到这一点,使默认情况仅在用户输入某些内容后发生。我试着用

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);
}
}
你应该使用

switch(userInput.nextLine()) {
.nextLine()
返回
系统中未读的第一行。
(并在必要时等待输入)

.toString()
返回对象的字符串表示形式,在您的情况下,它会锁定如下内容:

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(在扫描程序内),所以在您的程序完成之前,其他程序将无法使用资源

照办

userInput.close();

最后。

您需要使用String input=userInput.next();在switch语句之前,使用switch(输入),以便扫描器在执行switch之前等待用户输入并读取它


切换后,您需要使用userInput.close()来关闭扫描仪,从而消除错误。

您必须使用扫描仪的读取方法!Scanner.toString()不读取用户输入的内容。阅读javadoc。
if(!userInput=null)
应该是
if(userInput!=null)
谢谢!它现在几乎可以工作了!还有一件事。出于某种原因,在eclipse说@Eman11您的代码中没有任何循环之前,控制台不允许我键入超过2个内容。阅读下一行,回答,主函数结束。您需要一个循环来重复请求输入。我在哪里开始和结束循环(我是Java新手)任何循环都需要包括
userInput.nextLine()
(查找新输入)和
开关(评估它们)。例如:
对于(int i=0;i<10;++i){\n开关(userInput.nextLine()){…}\n}
(不带“\n”),我尝试在开关之前包含while循环,然后在开关之后和关闭userInput之后结束。Eclipse说:线程“main”java.lang.IllegalStateException中的异常:在com.robot.robot.main中java.util.Scanner.findWithinHorizon(未知源)处的java.util.Scanner.nextLine(未知源)处的java.util.Scanner.ensureOpen(未知源)处关闭了扫描程序(Robot.java:13)@各位,我在youtube上制作了一段视频来解释这一点,但这是一个更好的版本。请查看: