2013-12-07 6 views
0

Я работаю над проектом, чат Bot, и я почти сделал, кроме того факта, что всякий раз, когда я вхожу вход, он возвращает несколько выходов в зависимости от длины входного X.Chatbot возвращение ошибка

Вот исходный код:

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

}

Это для тестирования чат Bot:

import java.util.Scanner; 


public class Test { 
    public static void main (String [ ] args) 
    { 
    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.next(); 
    } 

} 
} 

I am also trying to modify the Bot so it counts the number of times it has responded; and also modify it so it randomly returns a random response depending on the length of the input. Any help will be much appreciated. Thank You! 

ответ

0

Вы используете метод Scanner.next, который возвращает только следующее слово в строке. Поэтому, если вы вводите строку с несколькими словами, ваш бот будет реагировать на каждый из них.

Вы можете использовать Scanner.nextLine(), чтобы получить всю строку ввода, а не только одно слово.


Чтобы подсчитать, сколько раз ваш бот откликнувшихся, вы можете создать поле в классе бот:

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")) 
    { 
     ... 
+1

Точнее: его не читать следующее слово, его просто разделение по умолчанию на пробелы. Поэтому, если пользователь вводит «bla test», он возвращает две разделенные строки. – Ben

+0

Что делать, если я просто хочу, чтобы бот ответил так: о чем бы вы хотели поговорить? как дела? Я неважен. Давайте поговорим о вас вместо этого. Мне нравится программирование на Java Теперь мы куда-то попадаем. Как программирование влияет на вас больше всего? Ошибки заставляют меня грустить Расскажите подробнее о багах. они означают, что код неправильный – user3077721

+0

@ user3077721 Если вы меняете 'input.next()' на 'input.nextLine()' в основном методе, это не то, что происходит? – MAV

0

Что касается подсчета ответов, просто изменить свой основной метод:

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

Если у меня есть время, я буду редактировать свой пост в течение нескольких минут, чтобы проверить вашу проблему относительно двойных appearences в ответ. Вы также забыли закрыть сканер.

EDIT: На самом деле это происходит потому, что сканер имеет по умолчанию разделитель, который находится в пробеле. поэтому, если вы вводите текст с пробелом, цикл while выполняется дважды для одного пользовательского ввода. Просто используйте команду nextLine().

Почему этот код:

Scanner input = new Scanner (System.in); 

В вашем методе GetResponse? Его вообще не используют. Присмотритесь к своим методам, поскольку они содержат какой-то странный код.

+0

Что вы подразумеваете под странным? – user3077721

+0

Sry Im просто не успевает исправить каждый аспект :) у вас есть этот код: '." .equals (longest); 'который фактически возвращает логическое значение, но никогда не используется. Точно так же, как и объект сканера, который не использовался, и теги close() для экземпляров сканера также отсутствуют – Ben

+0

Я вижу, хорошо, я посмотрю на него, спасибо – user3077721

Смежные вопросы