0

ChatBot に残っている最後の部分は 1 つだけです。チャットボット クラスを変更して、時折 (たとえば、30% の確率で) ユーザー入力に対してランダムに生成された標準的な返信を返すようにする方法を見つける必要があります。 OMG」、「あなたは言わない」、「本当に?」、または「なるほど」。

編集:推奨される変更を適用しました:

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

問題は、与えられた 5 つの応答のうちの 1 つではなく、同じ応答を返し続けることです。どんな助けでも大歓迎です、ありがとう!

編集:現在、ランダムな応答のみを提供し、getResponse() メソッドで他のすべての応答をオーバーライドしています。

4

2 に答える 2

1

ロジックを考えると、getRandomResponseメソッドは常に「OMG」を返す必要があります。これは、そのメソッドのループの最初の実行でカウンター = 1 になるためです。したがって、最初の if ステートメントが実行され、"OMG" が返されてメソッドが終了します。より良い等価物は、反復で奇妙なことをするのではなく、すべての応答を配列に入れ、そこからランダムな値を返すかもしれません:

String[] responses = {"OMG", "LOL", "You don't say", "Really?", "I See"};
return responses[(int)(Math.random() * responses.length)];
于 2013-12-08T21:17:04.157 に答える
0

In getRandomResponse, you make a random number generator using Random(), but you never use it. Then in your for loop, you execute your decision-making tree but use a variable counter that always begins at 0. Then on the first time through your loop, the first if statement will execute because 0 < 5, so "OMG" is returned.

Edit: I just noticed something else that is not going to work in your code:

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

You're trying to use counter to do two different things: you are trying to run this loop 10 times, but you're also using it to store random values.

于 2013-12-08T21:22:01.057 に答える