Javaでタッチタイピング練習の際に、一文字一文字判定させ、回答者に分かりやすく表示させたい

実現したいこと

  • 誤った文字の場合、その文字が間違いだとユーザーに分かりやすく表示させたい

前提

現在、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

コメントを投稿

0 コメント