元小学校教員!がIT企業へ転職したリアルなブログ

公立の小学校教員を4年間勤めた後、IT企業へ転職しました。教育・転職・ITに関する情報を発信していきます。

【Java】【初心者】しりとりプログラム~その④~(コンピュータ同士での対戦)

こんばんは。
駆け出しプログラマーのakhです。



今回は、コンピュータのメソッドを使って

コンピュータ同士での対戦をさせました。


完成したコードがこちらです。

package practice4;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Siritori13 {

	public static void main(String[] args) {
		boolean flag = true;
		List<String> used2 = new ArrayList<>();

		//最初の言葉をランダムで出す
		int count =0;
		int a = new Random().nextInt(50);
		String firstWord = new String();
		try{
			File file = new File("C:\\辞書\\sakura.txt");
			FileReader fr = new FileReader(file);
			BufferedReader bfr = new BufferedReader(fr);
			while(bfr.ready()){
				firstWord = bfr.readLine();
				firstWord = toUpper(firstWord);
				firstWord = remove(firstWord);
				if(count == a){
					break;
				}
			count ++ ;
			}
		} catch (IOException e) {
    		e.printStackTrace();
    	}

		System.out.println("最初の言葉は...");
		System.out.println(firstWord);
		String data = firstWord;
		String inputstr = data;

		int i = 0;
		while(i<10){
			System.out.println((i+1)+"回目");
			inputstr=computer(data,inputstr);
			if(used2.contains(inputstr)){
				System.out.println("一度使いました。");

				break;
			}
			used2.add(inputstr);
			i++;
		}
	}
	//コンピュータメソッド
	private static String computer(String data,String inputstr){
			List<String> used = new ArrayList<>();
			String word = new String();
			try {
				// ファイルのパスを指定する
				File file = new File("C:\\辞書\\sakura.txt");
				// ファイルが存在しない場合に例外が発生するので確認する
				if (!file.exists()) {
					System.out.print("ファイルが存在しません");
				}
				// BufferedReaderクラスのreadLineメソッドを使って1行ずつ読み込み表示する
				FileReader fileReader = new FileReader(file);
				BufferedReader bufferedReader = new BufferedReader(fileReader);
				 while ((data = bufferedReader.readLine()) != null) {
		               	word = data;
		               	data = toUpper(data);
		               	data = remove(data);
		               	//辞書に言葉があるか検索
		               	if(inputstr.charAt(inputstr.length()-1) == data.charAt(0)){
		               		if(!used.contains(word) ) {
		               			System.out.println("com:"+data);
		               			used.add(word);
		               			break;
		               		}
		               	}
	             }
				 used.add(inputstr);
				// 最後にファイルを閉じてリソースを開放する
		           bufferedReader.close();
	    	} catch (IOException e) {
	    		e.printStackTrace();
	    	}
			return data;
	}

	//カタカナ小文字を大文字に変換するメソッド
			private static String toUpper(String str) {
				str = str.replace("ャ","ヤ");
				str = str.replace("ュ","ユ");
				str = str.replace("ョ","ヨ");
				str = str.replace("ァ","ア");
				str = str.replace("ィ","イ");
				str = str.replace("ゥ","ウ");
				str = str.replace("ェ","エ");
				str = str.replace("ォ","オ");
				return str;
			}
	//語尾に「ー」があったら、取るメソッド
			private static String remove(String str2){
				if(str2.substring(str2.length()-1).equals("ー")){
					 str2 = str2.substring(0,(str2.length()-1));
				}
				return str2;
			}
	//語尾に「コウサン」、「ン」があるかどうか確認するメソッド
			private static boolean checkStr(String checkStr){
				boolean result = true;
				if(checkStr.equals("コウサン")){
					System.out.println("「コウサン」しました。");
				}else if(checkStr.substring(checkStr.length()-1).equals("ン")){
        			System.out.println("「ン」がつきました。");
				}else{
					//「ン」が付かない場合は検証結果をfalseにする
					return false;
				}
				return result;
			}
	//入力の言葉が「全角カタカナ」及び長音付「ー」かどうか確認するメソッド
			private static boolean Katakana(String str3){
				if(str3 == null || !str3.matches("^[ァ-ヶー]*$")){
					//一致しない場合、エラー
					System.out.println("全角カタカナで入力してください。");
					return false;
				}
				return true;
			}
}

表示画面は、こんな感じになりました。

最初の言葉は...
ドラヤキ
1回目
com:キシヤ
2回目
com:ヤギ
3回目
com:ギンガミ
4回目
com:ミミズ
5回目
com:ズッキーニ
6回目
com:ニンニク
7回目
com:クルミ
8回目
com:ミミズ
一度使いました。


ここでは、コンピュータの区別を付けていないので、

一度使った言葉が出てきた時点で、終了とさせました。



今まで、メソッドや引数の意味が分かっていなかったのですが、

試行錯誤しながら作っていくうちに、なんとなくですが分かるようになってきました。




そしてさらに!



最初の言葉は「シリトリ」から始めていましたが、

今回、Randomクラスを使って、辞書データの中から

ランダムに言葉を出せるようになりました(^O^)/

//最初の言葉をランダムで出す
		int count =0;
		int a = new Random().nextInt(50);
		String firstWord = new String();
		try{
			File file = new File("C:\\辞書\\sakura.txt");
			FileReader fr = new FileReader(file);
			BufferedReader bfr = new BufferedReader(fr);
			while(bfr.ready()){
				firstWord = bfr.readLine();
				firstWord = toUpper(firstWord);
				firstWord = remove(firstWord);
				if(count == a){
					break;
				}
			count ++ ;
			}
		} catch (IOException e) {
    		e.printStackTrace();
    	}