初めまして。
Javaの学習をしているものです。
先日、研修にて「正確さ重視の練習」 を行える機能を持たせたキータッチトレーニングができるものを作成しましたが、私は「正確さ重視の練習」ができる機能を実装できませんでした。正確さ重視の練習とは、入力されたデータと KTT 文字列を比較し、間違いがないか分析する機能です。
最終的には、模範解答にて理解しようと考えたのですが、模範解答にて理解できない箇所がございましたので質問します。
調べても出てこず、困っております。
ご教授いただけたら幸いです。どうぞよろしくお願いいたします。
#模範解答
Java
1import java.util.Scanner; 2 3public class Ktt14 { 4 public static void main(String[] args) { 5 6 System.out.println("キータッチ・トレーニングを始めましょう。"); 7 System.out.println(); 8 9 String[][] kttModelArray = new String[2][]; 10 String[] kttModel = { "deed did feed freed red deer", "freed red deer did ride free" }; 11 12 // スピードメソッドの呼び出し 13 speed(kttModel); 14 15 // 正確さメソッドの呼び出し 16 currect(kttModel); 17 18 } 19 20 public static void speed(String kttModel[]) { 21 22 System.out.println("スピード・トレーニングを始めましょう。"); 23 System.out.println(); 24 25 Scanner scan = new Scanner(System.in); 26 27 final int COUNT_LIMIT = 5; 28 29 // スピードトレーニングを5回行うための繰り返し処理 30 for (int i = 0; i < COUNT_LIMIT; i++) { 31 32 // 処理前の時刻を取得 33 long startTime = System.currentTimeMillis(); 34 35 for (int j = 0; j < 2; j++) { 36 37 // スピードトレーニングの見本を表示 38 System.out.println(kttModel[j]); 39 40 // 文字の入力 41 String input = scan.nextLine(); 42 43 // 改行 44 System.out.println(); 45 46 // 処理後の時刻を取得 47 long endTime = System.currentTimeMillis(); 48 49 long time = ((endTime - startTime) / 1000); 50 51 // タイピング時間によってコメントの変更 52 if (time <= 20) { 53 System.out.println("処理時間:" + time + "s" + " " + "すばらしい!"); 54 } else if (time >= 40) { 55 System.out.println("処理時間:" + time + "s" + " " + "がんばって!"); 56 } else { 57 System.out.println("処理時間:" + time + "s" + " " + "その調子!"); 58 } 59 60 // 改行 61 System.out.println(); 62 63 } 64 65 } 66 67 } 68 69 public static void currect(String kttModel[]) { 70 71 System.out.println("コレクト・トレーニングを始めましょう。"); 72 System.out.println(); 73 74 Scanner scan = new Scanner(System.in); 75 76 final int COUNT_LIMIT = 3; 77 78 // 正確さトレーニングを3回行うための繰り返し処理 79 for (int i = 0; i < COUNT_LIMIT; i++) { 80 81 for (int j = 0; j < 2; j++) { 82 83 // 正確さトレーニングの見本を表示 84 System.out.println(kttModel[j]); 85 86 // 文字の入力 87 String input = scan.nextLine(); 88 89 String kttModelArray[] = kttModel[j].split("", -1); 90 String inputArray[] = input.split("", -1); 91 92 // エラーの回数を初期化 93 int errorCount = 0; 94 // 1文字ずつ比較 95 for (int k = 0; k < inputArray.length; k++) { 96 97 // KTT文字列の文字数を超えてもエラー扱いにしない 98 if (k == kttModelArray.length - 1) { 99 break; 100 } 101 102 // 等しくなければエラー回数を増やす 103 if (!inputArray[k].equals(kttModelArray[k])) { 104 errorCount++; 105 } 106 107 } 108 109 // 入力文字の数が少ない場合の余分なエラーカウントを減らす 110 if (inputArray.length < kttModelArray.length) { 111 errorCount--; 112 } 113 114 // エラーが発生した場合、回数を出力 115 if (errorCount > 0) { 116 System.out.println("error count = " + errorCount); 117 } 118 119 } 120 // 改行 121 System.out.println(); 122 } 123 124 scan.close(); 125 126 } 127}
#理解ができない箇所
// KTT文字列の文字数を超えてもエラー扱いにしない
if (k == kttModelArray.length - 1) { break; }
模範解答にて、上記のようなコードがあります。これが具体的に何者なのか、どこからこのようなコードが出てきたのか、なぜ-1をすることで「文字列の文字数を超えてもエラー扱いにしない」処理ができるのかがよくわかりません。
どなたかご教授いただけたら幸いです。どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー