【初心者】【Java】しりとりプログラム~その①~
こんにちは!
駆け出しプログラマーのakhです。
なんと、
ついに、、
とても苦戦していた「しりとりプログラム」が
完成しました(^O^)/
といっても、コンピュータとの一対一ですが。
(最終目標は、8人プレイ)
初心者にとっては、ベリーハードでした。
以下、コードです。
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; public class Siritori12 { public static void main(String[] args) { boolean flag = true; String word = new String(); System.out.println("言葉を入力してください"); System.out.println("シリトリ"); String data = "シリトリ"; List<String> used = new ArrayList<>(); //5どちらかが敗北条件に達するor5回ループするまで繰り返す int i = 0; while(i<5){ //プレーヤーの場合、言葉を入力してもらう String inputstr; //String data = new String(); inputstr = new java.util.Scanner(System.in).nextLine(); if(Katakana(inputstr)==false){ continue; } //前の言葉から繋がっているかどうか if(!(data.charAt(data.length()-1) == inputstr.charAt(0))){ System.out.println("だめです。続く言葉を入れてください。"); flag = false; //continue; } //語尾に「ん」があるかどうか if(checkStr(inputstr)){ flag = false; //break; } if(used.contains(inputstr)){ System.out.println("その言葉は一度使いました。"); flag = false; //break; } used.add(inputstr); inputstr = toUpper(inputstr); inputstr = remove(inputstr); if(flag) { System.out.println((i+1)+"回目"); System.out.println("自分:"+inputstr); try { // ファイルのパスを指定する File file = new File("C:\\辞書\\sakura.txt"); // ファイルが存在しない場合に例外が発生するので確認する if (!file.exists()) { System.out.print("ファイルが存在しません"); return; } // 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); break; } } } // 最後にファイルを閉じてリソースを開放する bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } if(data == null){ System.out.println("辞書にもうありません。"); } //勝敗判定(勝敗が付かない場合は無限ループの先頭に戻る) if(flag && data == null) { System.out.println("あなたの勝ちです。"); break; }else if(!flag){ System.out.println("あなたの負けです。"); break; }else{ used.add(word); System.out.println("入力してください。"); i++; continue; } } //5回ループしたとき if(i==5){ System.out.println("----------------------------------------------------------------"); System.out.println("5回ループしました。"); System.out.println("あなたの勝ちです。"); } } //カタカナ小文字を大文字に変換するメソッド 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; } }
何が難しかったかというと、自分が入力した文字の
末尾の言葉を
(例えば「リンゴ」を入力した場合、「ゴ」)
自作の辞書データの中から検索して出力するところです。
while文を使って、辞書データを一行ずつ読んでいきました。
while ((data = bufferedReader.readLine()) != null) {
if文を使い、もしも入力した言葉の最後の一文字が、
辞書データの最初の一文字と一致していたら画面に出力しました。
if(inputstr.charAt(inputstr.length()-1) == data.charAt(0)){ System.out.println("com:"+data); break; } }
まだまだ学んだことがあるのですが、
つづきはその②へ!!