2013-07-26 4 views
2

Мне нужен сканер, который попросит пользователя ввести символ, однако если введено более одного символа, он должен снова запросить пользователя только для одного символа.Измерьте длину входного сигнала сканера

Это то, что я до сих пор:

System.out.print("(Player 2) Guess a letter: "); 
Scanner letterScan = new Scanner(System.in); 
while(letterScan.nextLine().length()>1) 
{ 
    System.out.print("(Player 2) Please guess only one letter: "); 

    //char inputLetter = letterScan.next().charAt(0); 
} 
char inputLetter = letterScan.next().charAt(0); 
System.out.println("letter: " + inputLetter); 

Единственная проблема в том, что это выход, когда я запускаю его:

(Player 2) Guess a letter: asfa 
(Player 2) Please guess only one letter: a 
s 
letter: s 

Вы видите третью строчку? Он просит другое приглашение. Я хочу избавиться от этого и сделать так, чтобы вместо этого вместо него использовать букву во второй строке. Есть идеи?

ответ

5

Линия letterScan.next() читает дополнительный символ после вас получите правильную линию. Вы должны сохранить первый вход 1 символа, который вы получите, например, так:

System.out.print("(Player 2) Guess a letter: "); 
Scanner letterScan = new Scanner(System.in); 
String line = ""; 
//just check for one character. 
while((line=letterScan.nextLine()).length()!=1) 
{ 
    System.out.print("(Player 2) Please guess only one letter: "); 
} 
char inputLetter = line.charAt(0); 
System.out.println("letter: " + inputLetter); 

изменить Также ваш цикл времени, чтобы просто проверить вход имеет 1 символ, в противном случае игрок может просто нажать ввод и ваш код будет врезаться в вход будет иметь 0 символов. Вышеприведенный код также делает это.

+0

Это не работает. Вы сравниваете строку с числом в условии while while. – Mo2

+0

Не знаете, что вы, ребята, говорите здесь ... код, который я опубликовал, отлично работает. У меня было небольшое редактирование. Возможно, он еще не обновился на ваших экранах? –

+0

Я не уверен, почему вы изменили «>» на «==», так как это изменило условие, в котором я нуждался, но в противном случае код работает. Я изменил == назад на> 1, как раньше. Трюк имел пустую строку в начале. Благодарю. – Mo2

2

его, потому что эта линия:

char inputLetter = letterScan.next().charAt(0); 

удалить эту строку & изменить это заявление:

while(letterScan.nextLine().length()>1) 

к

String line = letterScan.nextLine(); 
while(line.length()>1) 
+1

+1, хотя цикл while также испорчен. Я обращаюсь к этому в своем ответе. –

+1

@WilliamMorrison ya, right – Ankit

+0

Не работает. Вместо этого я получаю следующий результат: (Игрок 2) Угадайте письмо: adad adsad ada ada (Игрок 2) Пожалуйста, угадывайте только одну букву: (Игрок 2) Предположите, что только одна буква: (Игрок 2) Пожалуйста, угадайте только одно письмо: (Игрок 2) Пожалуйста, угадайте только одну букву: (Игрок 2) Пожалуйста, угадайте только одну букву: (Игрок 2) Пожалуйста, угадайте только одну букву: (Игрок 2) – Mo2

2

Используйте этот код ... Комментарии в коде объясняют ответ.

System.out.print("(Player 2) Guess a letter: "); //prompt 
    Scanner letterScan = new Scanner(System.in); 
    String input = ""; //create string for input 
    while((input = letterScan.nextLine()).length() != 1) { //while they entered more than one letter 
     System.out.print("(Player 2) Please guess only one letter: "); //re-prompt 
    } 
    char inputLetter = input.charAt(0); 
    System.out.println("letter: " + inputLetter); //print the letter 

Раньше вы получали .next() снова, чтобы получить новый вход, но здесь мы сохраняем введенные данные, а затем получить первый символ.

+0

В то время как цикл также испорчен. –

+0

@WilliamMorrison Mine есть? – Dev

+0

Нет, OP, а не ваш. Он рухнет без ввода. Я обратился к этому в своем ответе, просто возглавил. –

Смежные вопросы