質問: 0){ timer.stop(); System.out.println("時間"+ " : " + timer); System.out.println("入力ミス" +" : "+ missCount); System.out.println("入力ミス /時間" +" : "+ (missCount /timer)); enterN++; }else{ timer.start(); enterN++; } ・・・ 省略 ・・・ ``` System.out.println("入力ミス /時間" +" : "+ (missCount /timer)); ここのtimerにエラーが付きます。 やりたいこととしてENTER一回押されたらTIMERすたーとして 2回目にその間にミスした文字数を時間で割り表示しようと考えています。
回答: 文字列を連結する場合、計算した結果を出したいのであればその部分は優先して処理してもらうためにカッコで囲む必要があります。数式と同じで、カッコで囲まれた部分が先に解決され、入力ミスの回数を時間経過で割った値を文字列として連結する順序となります。 ``` System.out.println("入力ミス /時間" +" : "+ (missCount /timer)); ``` しかし、これだけではあなたのコードのエラーは消えません。 繰り返し処理を呼び出すためのtimerと、時間経過を測るための変数がごっちゃになっていると思います。Timerはあくまで繰り返し処理を呼び出すためのものであり、時間経過をTimerから知ることはできません。ですが、あなたのコードは「時間」の表示にtimer変数を使っており、あなたの意図した動作をするコードになっていません。回数をタイマーで割るのはおかしいですよね? ``` timer.start; enterN++; ``` あとここですが、timerのstartメソッドを呼ぶならstartの後ろに()が足りません。 ### 追記 時間経過を測りたいのであれば、開始した瞬間の時間と、終了した瞬間の時間を取り、その差分を見るのが一般的です。現在時刻を数値として取る方法として一般的なのはSystem.currentTimeMillis())です。 ``` // クラス変数に追加 long start; // タイマーのスタート時に開始時刻を記録 timer.start(); enterN++; start = System.currentTimeMillis(); // タイマーのストップ時に終了時刻を記録 timer.stop(); long end = System.currentTimeMillis(); long time = end - start; // 終了時刻と開始時刻の差が経過時間となる(ミリ秒) // あとは求めた経過時間timeで表示や計算する System.out.println("時間"+ " : " + time); System.out.println("入力ミス" +" : "+ missCount); System.out.println("入力ミス /時間" +" : "+ (missCount /time)); ```