takuma150318
@takuma150318

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

java if文

解決したいこと

簡単なプログラムでEraizaの作成を行っています。
このEraizaでは、一問一答形式で質問したらその質問を答えるようにプログラムを組んでいます。

発生している問題・エラー

現在エラーは起こっていないのですが、if文での質問を行い違う質問をした際に前の質問が返ってくるようになってしまっています。
違う質問を行った場合違う質問で返答できるように改善したいのですがif文のどの部分を改善よいかわかっていません。

if文

package guitest;

import java.util.Random;

//イライザクラス
class Eliza {

	public String hanasu(String str1) {

		int k1 = 0, k2 = 0;
	


		//私は○○が好きに対応

		k1 = str1.indexOf("私は");

		k2 = str1.indexOf("だよ");

		if (k1 >= 0 && k2 >= 0) {

			String str2 = str1.substring(k1 + 2, k2);

			return ("こんにちは" + str2 + "さん");

		}

		//「こんにちは」が含まれるか判断

		k1 = str1.indexOf("こんにちは");

		if (k1 >= 0)
			return ("こんにちは!");

		k1 = str1.indexOf("お話しよ");

		if (k1 >= 0)
			return ("いいよ!");

		//どんな食べ物が好き?

		k1 = str1.indexOf("食べ物");

		k2 = str1.indexOf("好き");

		if (k1 >= 0 && k2 >= 0) {

			java.util.Date d = new java.util.Date();

			long t = d.getTime();

			if (t % 3 == 0)

				return ("イチゴが好き.");

			else if (t % 3 == 1)

				return ("私もそれが好き");

		}

		//「天気」が含まれるか判断

		k1 = str1.indexOf("いい天気だね");
		// 0から3までの範囲で乱数を1つ生成する
		Random rand = new Random();
		int k11 = rand.nextInt(3);

		// 取得した乱数の値によって、結果を表示する
		if (k11 == 0) 
		{
			return ("今日は晴れだね");
		}
		else if (k11 == 1) 
		{
			return ("今日は快晴だね");
		}
		else if (k11 == 2) 
		{
			return ("今日は曇りだね");
		} 
		
		//私は○○を食べたに対応

				k1 = str1.indexOf("私は");

				k1 = str1.indexOf("を食べたんだ");

				if (k1 >= 0 && k2 >= 0) {

					String str2 = str1.substring(k1 + 2, k2);

					return (  str2 + "おいしそうだね!");
	
				}

				//私は○○してたよに対応

				k11 = str1.indexOf("今日は");

				k2 = str1.indexOf("してたよ!");

				if (k11 >= 0 && k2 >= 0) {

					String str2 = str1.substring(k11 + 2, k2);

					return ("今日は" + str2 + "してたのか!");
					

				}
				k11 = str1.indexOf("そうだよ");
				if (k11 >= 0)
					return ("楽しそうだね!");
				
		
		return("会話の終了");


	}
}

または、問題・エラーが起きている画像をここにドラッグアンドドロップ
java.png

該当するソースコード

// 取得した乱数の値によって、結果を表示する
		if (k11 == 0) 
		{
			return ("今日は晴れだね");
		}
		else if (k11 == 1) 
		{
			return ("今日は快晴だね");
		}
		else if (k11 == 2) 
		{
			return ("今日は曇りだね");
		} 
		

自分で試したこと

何度か k11==0 の条件式を変えたりしているのですが変わっていませんでした。

0

1Answer

		k1 = str1.indexOf("いい天気だね");

で「いい天気だね」が入力されているか調べていますが、k1の値を比較して処理していないので、それ以降の部分では必ず「いい天気だね」に対する処理が行われてしまいますよ。

1Like

Comments

  1. @takuma150318

    Questioner

    ご丁寧な解説ありがとうございます!
    @shiracamus

Your answer might help someone💌