Когда пользователь пишет в консольных символах, для подтверждения того, что его ввод готов к передаче в приложение, он нажимает клавишу enter .Но консоль не передает только предоставленные символы, она также добавляет к входному потоку (System.in) зависящий от ОС разделитель строк символов после нее.Некоторые ОС используют \r
или \n
(это одиночные символы, \x
- просто обозначение для их представления), другие, например, Windows, используют последовательность \r\n
(два символа) в качестве разделителя строк.
Теперь эти дополнительные символы также считываются System.in.read()
, и поскольку они не равны S
System.out.println("wrong.guess again to finish the program");
, выполняется дополнительное время.
Чтобы избежать таких проблем, вместо работы с rawданные через System.in.read()
рассмотрите возможность использования классов, предназначенных для облегчения нашей жизни, например java.util.Scanner
Scanner sc = new Scanner(System.in);
System.out.println("Guess a capital letter Character");
String response = sc.nextLine();
while(!response.equals("S")){
System.out.print("incorrect data, please try again: ");
response = sc.nextLine();
}