Java 聊天机器人返回错误

Java 聊天机器人返回错误,java,chatbot,Java,Chatbot,我正在做一个聊天机器人项目,我几乎完成了,除了这样一个事实:每当我输入一个输入,它都会根据输入X的长度返回多个输出 以下是源代码: import java.util.*; public class ChatBot { public static String getResponse(String value) { Scanner input = new Scanner (System.in); String X = longestWord(value); if (valu

我正在做一个聊天机器人项目,我几乎完成了,除了这样一个事实:每当我输入一个输入,它都会根据输入X的长度返回多个输出

以下是源代码:

import java.util.*;
public class ChatBot
{
public static String getResponse(String value)
{
    Scanner input = new Scanner (System.in);
    String X = longestWord(value);
    if (value.contains("you"))
    {
        return "I'm not important. Let's talk about you instead.";
    }
    else if (X.length() <= 3)
    {
        return "Maybe we should move on. Is there anything else you would like to talk about?";
    }
    else if (X.length() == 4)
    {
        return "Tell me more about " + X;
    }

    else if (X.length() == 5)
    {
        return "Why do you think " + X + " is important?";
    }

    return "Now we are getting somewhere. How does " + X + " affect you the most?";
}

private static String longestWord(String value){
    Scanner input = new Scanner (value);
    String longest = new String();
    "".equals(longest);

    while (input.hasNext())
    {
        String temp = input.next();
        if(temp.length() > longest.length())
        {
            longest = temp;
        }
    }
    return longest;
}

关于计算响应,只需修改您的主要方法:

import java.util.Scanner;

public class Test {
public static void main (String [ ] args)
{
   int numberOfResponses = 1;
   Scanner input = new Scanner (System.in);
   ChatBot e = new ChatBot();
   String prompt = "What would you like to talk about?";
   System.out.println(prompt);
   String userInput;
   userInput = input.next();
   while (!userInput.equals("Goodbye"))
   {
      System.out.println(e.getResponse(userInput));
      userInput = input.nextLine();
      numberOfResponses++;
   }
   input.close();
   System.out.println(numberOfResponses);
}
}
如果我有时间的话,我会在几分钟内编辑我的帖子,检查你关于回复出现双重现象的问题。您还忘了关闭扫描仪

编辑:这实际上是因为扫描器的默认分隔符设置为空白。因此,如果您输入一个带有空格的文本,while循环将为一个用户输入运行两次。只需使用nextLine()命令

为什么这个代码是:

 Scanner input = new Scanner (System.in);
在你的getResponse方法中?它根本不用。仔细查看您的方法,因为它们包含一些奇怪的代码。

您使用的方法只返回字符串中的下一个单词。因此,如果您输入一个包含多个单词的字符串,您的机器人将对每个单词做出响应

可以使用获取整个输入字符串,而不是仅获取一个单词


要计算bot响应的次数,可以在bot类中创建一个字段:

private int responseCount = 0;
然后,如果将yout
getResponse
方法从静态方法更改为实例方法,则可以从此方法更新此值:

public String getResponse(String value)
{
    String X = longestWord(value);  //Your longestWord should also not be static.
    this.responseCount++;        

    if (value.contains("you"))
    {
        ...

更准确地说:它不读取下一个单词,只是默认情况下在空白处拆分。因此,如果用户输入“blatest”,它将返回两个单独的字符串。如果我只是想让bot以这样的方式回答:您想谈什么?你好吗?我不重要。让我们来谈谈你吧。我喜欢Java编程,现在我们正在取得进展。编程对你影响最大的是什么?虫子让我伤心告诉我更多关于虫子的事。他们的意思是代码不是right@user3077721如果将main方法中的
input.next()
更改为
input.nextLine()
,是否会发生这种情况?没关系,我已将代码中的其他地方的.next()更改为.nextLine(),它正在以应有的方式响应。谢谢你你说的奇怪是什么意思?我只是没有时间纠正每一个方面:)例如,你有这样的代码:
“”。等于(最长)
实际返回布尔值,但从未使用过。就像未使用的scanner对象一样,scanner实例的close()语句也丢失了
public String getResponse(String value)
{
    String X = longestWord(value);  //Your longestWord should also not be static.
    this.responseCount++;        

    if (value.contains("you"))
    {
        ...