class Noob1 {
public static void main(String args[])
throws java.io.IOException{
char ch, answer;
answer = 'g';
do {
System.out.println("Guess from A-L:");
ch = (char) System.in.read();
if(ch == answer){
System.out.println("Congratz!");
} else System.out.println("Try again!");
} while (ch != answer);
}
}
Выход заключается в следующем:Java сделать, в то время как петля пропуск консольного ввода
Guess from A-L:
a
Try again!
Guess from A-L:
Try again! // this is where intuitively it should ask for input again
Guess from A-L:
Try again!
Guess from A-L:
g // input is skipped a few times
Congratz!
Я не могу понять, почему, я читаю книгу для начинающих, так и все должно уже были рассмотрены, что же Я пропустил?
Добавление кода, приведенного ниже в конце цикла, подтверждает, что оно зацикливается, но вход каким-то образом пропускается.
i++;
System.out.println(i);
Так что я получил это работает, используя это:
import java.io.*;
class Noob1
{
public static void main(String args[]) throws java.io.IOException
{
char ch, answer;
String tmp;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
answer = 'g';
do
{
System.out.println("Guess character followed by ENTER:");
tmp = bufferedReader.readLine();
ch = tmp.charAt(0); // only first char is considered
if (ch == answer)
System.out.println("Gratz! the answer was: " + ch + "!");
else
System.out.println("Nope, try again..");
} while (ch != answer);
}
}
ли форматирование еще страшно?
Полезно иметь привычку использовать последовательные отступы и фиксации с самого начала. Код в вопросе может использовать некоторую очистку. –
@Tunaki: OP не использует 'Scanner'. Но, возможно, еще будет более ранняя версия этого вопроса, используя 'System.in' напрямую. –
@ T.J.Crowder Вы правы ... глупо меня. Спасибо за указание на это. Это было бы более подходящим http://stackoverflow.com/questions/27239265/whats-wrong-with-for-loop или http://stackoverflow.com/questions/15296637/system-in-read-miss-execution – Tunaki