私は現在クライアント/サーバ推測ゲームを作成しています。不正な入力の後に入力プロンプトが表示されない
私はクライアントのためのゲームの単一のインスタンスを扱うguessGameServerHandlerクラス、(ゲームはマルチスレッドである)
を持って、私はまた、その後、ハンドラが応答し、入力中のクライアントクラスの読書を持っています。
ユーザーが整数の代わりに文字列を入力した後、ループバックして入力を再度要求しても、エラーを出力する必要がありますが、機能していないようです。助言がありますか?
クライアントコード:(これは、入力が正しい数に等しいか否かをチェック、do-while文である)
// Read in clients input
System.out.print("Enter guess: ");
guess = Integer.parseInt(stdin.readLine());
// send guess to server
out.write(String.format("%s%n", guess));
out.flush();
guessGameHandlerServer:現在のコードで
do {
try{
// Read in guesses from user
guess = Integer.parseInt(in.readLine());
}catch(NumberFormatException e){
}
gs.guess(guess);
String timeForm = decFor.format(gs.getTimeRemaining()/1000D);
// Check user input against target number & time left
if (gs.getTimeRemaining() < 1) {
System.out.println(ID + " - (LOSE)" + timeForm + "/" + gs.getGuesses());
client.close();
} else if (gs.getTimeRemaining() > 0 && guess > gs.getTarget() && guess < maxNum) {
out.write(String.format("HIGH:%s:%d%n", timeForm, gs.getGuesses()));
out.flush();
System.out.println(ID + " " + guess + "(HIGH)-" + timeForm + "s/" + gs.getGuesses());
} else if (gs.getTimeRemaining() > 0 && (guess < gs.getTarget() && guess > 0)) {
out.write(String.format("LOW:%s:%d%n", timeForm, gs.getGuesses()));
out.flush();
System.out.println(ID + " " + guess + "(LOW)-" + timeForm + "s/" + gs.getGuesses());
} else if (gs.getTimeRemaining() > 0 && guess == gs.getTarget()) {
out.write(String.format("WIN:%d%n", gs.getGuesses()));
out.flush();
System.out.println(ID + " " + guess + "(WIN)-" + timeForm + "s/" + gs.getGuesses());
} else if (gs.getTimeRemaining() > 0 && (guess >= maxNum || guess < 1)) {
out.write(String.format("ERR:%d%n", gs.getGuesses()));
out.flush();
System.out.println(ID + " ** (ERR out of range)" + timeForm + "/" + gs.getGuesses());
}
} while (true);
、文字列を入力します理由だけでクライアントスレッドを閉じることができます。
これは機能しますが、クライアントが誤った入力をしたときにもサーバーにメッセージを送信しようとしています。キャッチブロック内に 'out.write'を置くことは機能していないようです。 – Travisty
ユーザーが間違った入力を入力したときに、何をサーバーに送信しますか?誤ったユーザー入力による値がないため、「推測」を送信することはできません。この場合に送信したいものは、「キャッチ」ブロックに入れてから「フラッシュ」します。それは動作するはずです。 – AhmadWabbi