2014-11-15 2 views
0

Я пытаюсь прочитать отдельные имена и инструменты до тех пор, пока не будет достигнуто общее количество участников полосы (задано ранее в программе). Программа считывает сумму и читает первое имя. Однако после этого он терпит неудачу в том, что он только считывает первое имя, после чего он не печатает никаких имен или инструментов. Петля в то время как ниже является наиболее вероятным источником проблемы:Неисправность при чтении строк с циклами

i = counter 
while(i <= bandMembers) 
    { 
     System.out.println("What is band member " + i + "'s name?"); 
     kb.nextLine(); 
     String bName = kb.nextLine(); 
     System.out.println("What instrument does " + bName + " play?"); 
     kb.nextLine(); 
     String bNamePlay = kb1.nextLine(); 
     list = list + i + ":" + " " + bName + " - " + bNamePlay+ "\n"; 
     i++; 
    } 

Это то, что он печатает, если я вошел в первое имя, как bName1:

Band Members 
-------------- 
1: bName1 - 
2: - 
3: - 

Любая помощь приветствуется, спасибо.

+1

Почему вы называете 'kb.nextLine()', а затем 'Струнный ... = kb1.nextLine();'? Это два разных сканера? Если это так, вам нужно только 'String ... = kb1.nextLine();'. Единственное, что я вижу, это то, что вы не вводите данные для него. – CoderMusgrove

ответ

0

Использование BufferedReader instead.This зафиксирует ваш problem.:-

BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
i=counter; 
while(i<=bandMembers){ 
System.out.println("Enter band member "+i+" name:-"); 
String bName=br.readLine(); 
System.out.println("What instrument does "+bName+" play?"); 
String bNamePlay=br.readLine(); 
list = list + i + ":" + " " + bName + " - " + bNamePlay+ "\n"; 
i++; 
} 
+0

Это прекрасно работает, спасибо –

+0

Спасибо, что согласился! –

0

Вы должны использовать

String bName = kb.next(); 

В предположении, что вы с помощью сканера.

Когда вы вызываете nextLine(), он считывает оставшуюся часть той же строки и не ждет ввода.

+0

Хорошая идея. Таким образом, вы можете избегать имен групп с пространством в их имени ... И нет проблем с 'nextLine', если вы используете его правильно (т. Е. Не смешивайте его с' nextInt' или так). – Tom

+0

Сначала я использовал kb.next, но он читал каждое слово, разделенное пробелом, следующим именем. Например, я хотел бы ввести «Джимми свободные руки», и это подскажет инструмент Джимми правильно, но тогда он попросит имя члена группы 2 и «какой инструмент проигрывает?» одновременно. Таким образом, это заняло второе слово как следующее имя –

0

У меня недостаточно комментариев, чтобы комментировать возникшую проблему: Сначала я использовал kb.next, но он читал каждое слово, разделенное пробелом, следующим именем. Например, я хотел бы ввести «Джимми свободные руки», и это подскажет инструмент Джимми правильно, но тогда он попросит имя члена группы 2 и «какой инструмент проигрывает?» одновременно. Поэтому второе слово назвалось следующим именем.

Что вы можете сделать, это удалить «kb.nextLine();» before "String bName = kb.nextLine();" У меня нет IDE для подтверждения, но это может быть причиной того, что второе слово/строка вводится как имя.