実現したいこと
- 誤った文字の場合、その文字が間違いだとユーザーに分かりやすく表示させたい
前提
現在、Javaを使ってタッチタイピング練習プログラムを作成しています。
プログラム自体の基本フローは完成しているのですがが、なにか物足りなく、問題文と入力した文字が一文字でも誤っていた場合、その誤っていた文字をユーザーに分かりやすく表示させたいと思っています。
色々試してみましたが、理解ができなかったので、なにかいい方法などや例コードなどあれば教えていただきたいです。
基本の処理フロー
- 問題文字列表示
- ユーザーが文字を入力
- 誤った答えなら、間違いと表示
- 正解なら正解と表示
- 最終的なスコアを表示させる
該当のソースコード
コードはMainのほかに別のクラスを作り、Wordクラスから文字配列をもってきています。
Java
1public class Main { 2 3 public static void main(String[] args) { 4 java.util.Scanner scanner = new java.util.Scanner(System.in); 5 6 Word word = new Word(); 7 String finishWord = "終了"; 8 int score = 0; 9 int missScore = 0; 10 11 System.out.println("タイピング練習を始めるには1を押してください"); 12 System.out.println("もし、途中で終わりたいときは終了と入力してください"); 13 int typingStart = scanner.nextInt(); 14 15 if(typingStart == 1) { 16 Main.timer(); 17 } 18 19 while(true) { 20 21 //配列呼び出し 22 word.setWordList(); 23 System.out.println(word.getWordV()); 24 25 //結果入力 26 @SuppressWarnings("resource") 27 String wordAnswer = new java.util.Scanner(System.in).nextLine(); 28 29 if(wordAnswer.equals(finishWord)) { 30 break; 31 } 32 else if(wordAnswer.equals(word.getWordV())) { 33 System.out.println("正解!"); 34 score++; 35 } 36 else { 37 System.out.println("不正解"); 38 missScore++; 39 } 40 } 41 42 System.out.println("お疲れ様でした。"); 43 System.out.println("あなたのスコアは 正解:" + score + " 不正解:" + missScore + "です"); 44 45 scanner.close(); 46 47 } 48 49 //タイピング前のタイマー 50 public static void timer() { 51 52 try { 53 System.out.print(" 3,"); 54 Thread.sleep(1000); 55 System.out.print(" 2,"); 56 Thread.sleep(1000); 57 System.out.print(" 1"); 58 Thread.sleep(1000); 59 System.out.println("開始!"); 60 } catch (InterruptedException e) { 61 e.printStackTrace(); 62 } 63 } 64 65}
Java
1public class Word { 2 3 //例文 4 private String[] wordList = {"りんご", "みかん", "ぶどう", 5 "さくらんぼ", "ぱいなっぷる"}; 6 7 private String wordV; 8 9 //ランダム表示 10 public void setWordList() { 11 int wordRandom = new java.util.Random().nextInt(getWordListLength()); 12 this.setWordV(wordList[wordRandom]); 13 } 14 15 public String[] getWordList() { 16 return wordList; 17 } 18 19 //配列の長さ 20 public int getWordListLength() { 21 return wordList.length; 22 23 } 24 25 public String getWordV() { 26 return wordV; 27 } 28 29 public void setWordV(String wordV) { 30 this.wordV = wordV; 31 } 32}
試したこと
- splitを使った比較方法
- Array?を使った方法
補足情報
Java 17
まず、同じストリーム (System.in) を元とする複数の Scanner オブジェクトは作らないようにしてください。
そして、何を持って「分かり易い」と判断するのかは作者が決めることです。
ついでに Word クラスは大した処理をしていません。(ランダムに文字列を返すメソッドが一つあるだけで済むのでは。)
始めるときの入力で 1 以外の数字や文字入力したらどうなりますか。

回答1件
あなたの回答
tips
プレビュー