Ich schreibe gerade ein Client/Server Ratespiel.Ich kann nach einer falschen Eingabe keine Eingabeaufforderung erhalten
ich eine guessGameServerHandler Klasse haben, die für einen Kunden eine einzige Instanz eines Spiels Griffe
(das Spiel Multi-Threaded ist) ich auch eine Client-Klasse Lesung im Eingang haben, dann reagiert der Handler.
Ich muss einen Fehler ausgeben, wenn der Benutzer eine Zeichenfolge statt einer Ganzzahl eingibt, dann zurückschleifen und erneut nach Eingabe fragen, aber es scheint nicht zu funktionieren. Irgendwelche Vorschläge?
Client-Code: (dies in einer Do While-Schleife ist, zu überprüfen, ob Eingabe richtige Nummer oder nicht gleich)
// 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);
mit dem aktuellen Code, Eingabe einer Zeichenfolge macht den Client Thread nur knapp, keine Ahnung warum.
das funktioniert, aber ich versuche auch, eine Nachricht an den Server zu senden, wenn der Client eine falsche Eingabe eingibt. Das 'out.write' innerhalb des catch-Blocks zu setzen, scheint nicht zu funktionieren. – Travisty
Was möchten Sie an den Server senden, wenn der Benutzer eine falsche Eingabe eingibt? Sie können "rate" sicher nicht senden, da es aufgrund falscher Benutzereingaben keinen Wert hat. Was auch immer Sie in diesem Fall senden möchten, legen Sie es in den "Fang" -Block, gefolgt von "Flush". Es sollte funktionieren. – AhmadWabbi