2013-06-27 4 views
3

Я новичок в программировании, и у меня проблема с классом сканера. Этот код находится в цикле, и когда цикл приближается ко второму, третье время, которое у меня есть, оно пропускает первый заголовок. Мне нужна помощь, пожалуйста, почему это пропускает мой заголовок в начале сканера?Класс сканера пропускает строки

System.out.println("Title:"); 

list[i].title=keyboard.nextLine(); 

System.out.println("Author:"); 

list[i].author=keyboard.nextLine(); 

System.out.println("Album:"); 

list[i].album=keyboard.nextLine(); 

System.out.println("Filename:"); 

list[i].filename=keyboard.nextLine(); 
+4

Можете ли вы выслать полный код? – Reimeus

+0

Что вы подразумеваете под "skips"? Где находится этот код? Дайте нам немного [пример кода] (http://sscce.org/) для запуска, который отображает проблему. –

ответ

1

Вполне вероятно, что в коде вы не показали нам, существует вызов к одному из Scanner методов ввода, не потребляющих метод перевода строки. nextLine например. В этом случае символ новой строки будет передан от конца цикла к следующему оператору nextLine. Это теперь не будет блокировать получение ввода. Решение состоит в том, чтобы обеспечить, чтобы новая линия потреблялась в конце каждой итерации.

// list[i].id = keyboard.nextInt(); 
list[i].id = Integer.parseInt(keyboard.nextLine()); 
+0

Да, вы правы, это только часть кода! Последняя строка кода - nextInt(); –

+0

Что я узнал, так это то, что когда у вас есть сканер, например, –

+0

Что я узнал, так это то, что когда у вас есть сканер, например, keyboard.nextLine(); а затем keyboard.nextInt(); Компьютер хранит отсканированную строку, а также готов к следующей итерации, но после сканирования в Int компьютер не завершает итерацию до оператора nextLine. Поэтому всякий раз, когда есть Int, он должен быть nextLIned, прежде чем вы сможете ввести следующую информацию в Сканере. Строка не обязательно должна быть следующей. Она выполняется автоматически. –