2013-12-08 2 views
0

Всего одна последняя часть, оставшаяся в ChatBot. Мне нужно выяснить способ изменения класса chatbot, так что , что он иногда (скажем, 30% времени) возвращает случайный генератор стандартного ответа на пользователя, вводят по меньшей мере пять возможных ответов, таких как «LOL», «OMG», «Вы не говорите», «Действительно?» Или «Я вижу».Чат Bot, последняя часть

Edit: Applied рекомендуемые изменения:

import java.util.Random; 
import java.util.Scanner; 
public class ChatBot 
{ 
private int responseCount = 0; 
public String getResponse(String value) 
{ 
    String X = longestWord(value); 
    this.responseCount++; 
    if (responseCount == 10) 
    { 
     return "Sorry, but our time is up. I can't talk with you any longer."; 
    } 
    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?"; 
    } 
    else if (X.length() <=9) 
    { 
    return "Now we are getting somewhere. How does " + X + " affect you the most?"; 
    } 

    return getRandomResponse(); 
} 


public String longestWord(String value){ 
    Scanner input = new Scanner (value); 
    String longest = new String(); 
    longest = ""; 

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

private String getRandomResponse() 
{ 

String [] responses = {"OMG", "LOL", "You don't say", "Really?", "I See"}; 

return responses [(int)(Math.random() * responses.length)]; 
} 
} 

Проблема заключается в том, что продолжает возвращаться один и тот же ответ, вместо того, чтобы один из пяти ответов, данных. Любая помощь мне очень понравилась, спасибо!

Редактировать: теперь он дает только случайные ответы и отменяет каждый ответ в методе getResponse().

ответ

1

Учитывая вашу логику, ваш метод getRandomResponse должен всегда возвращать «OMG». Это связано с тем, что при первом запуске цикла в этом методе счетчик = 1. Таким образом, будет выполняться первый оператор if и вернется «OMG», выходя из метода. Приятнее эквивалент может положить все Teh ответов в массив и возвращает случайное значение из него, а не делать somehting странного с итерацией:

String[] responses = {"OMG", "LOL", "You don't say", "Really?", "I See"}; 
return responses[(int)(Math.random() * responses.length)]; 
+0

Downvoter, могу ли я спросить, почему? – Sinkingpoint

+0

Я не думаю, что я проголосовал. – user3077721

+0

@ user3077721 Вы, вероятно, этого не сделали, кто-то сделал это. Просто хотелось узнать почему. Как это, ответ на ваш вопрос? – Sinkingpoint

0

В getRandomResponse, вы делаете генератор случайных чисел с помощью Random(), но вы никогда не использовать Это. Затем в вашем цикле for вы выполняете дерево принятия решений, но используете переменную counter, которая всегда начинается с 0. Затем в первый раз через ваш цикл будет выполнен первый оператор if, потому что 0 < 5, так возвращается "OMG".

Edit: Я просто заметил, что-то другое, что не собирается работать в вашем коде:

Random randomNumber = new Random(); 
for (int counter =0; counter<10; counter++) 
{ 
    counter = randomNumber.nextInt(); 

Вы пытаетесь использовать counter сделать две разные вещи: вы пытаетесь запустить этот цикл в 10 раз , но вы также используете его для хранения случайных значений.

+0

понял, спасибо большое, я достал цикл for и застрял в стойке, чтобы хранить случайные значения. – user3077721