Проблема в том, что когда вы нажимаете f
, а затем Enter, вы нажимаете две клавиши и, следовательно, получаете две char
s, одну строчную букву f ('f'
) и один символ перевода строки / новой строки ('\n'
) ).
Аналогичным образом вы можете ввести abc
и нажать клавишу ввода, и вы увидите, что цикл повторяется 4 раза вместо 1.
Это можно исправить одним из двух способов. Возможно, проще всего прочитать char
, прочитав всю строку, а затем используя только первую букву. Я не знаю, что это за класс Clavier
, но если он похож на этот класс , вы можете использовать что-то вроде:
sex = Clavier.lireChaine().charAt(0);
В качестве альтернативы, вы можете продолжать читать отдельные символы до вы получаете что-то, что не является переводом строки:
while ((sex = Clavier.lireChar()) == '\n');
Теперь оно больше не будет l oop дважды за каждую попытку, но из-за проблемы, упомянутой Тушаром , оно будет продолжайте спрашивать вечно и никогда не принимайте никаких входных данных, потому что если вы введете f
, тогда sex != 'h'
будет истиной, а если вы введете h
, тогда sex != 'f'
будет истиной, и любое условие заставит l oop повториться.