Цикл For или While, пропускающий вход
Возможный дубликат:
Ошибка сканера при использовании nextLine после nextInt
Я создаю клиентскую программу, которая должна читать и строку, и целое число с моего сервера. В зависимости от того, какое целое число он получает, он добавляет некоторые метки в графический интерфейс. Пока что моя программа читает целое число, но пропускает строку. Следующий вывод - это вывод моей программы, когда я пытаюсь записать в программу целые числа:
- Сервер пишет: 1
- Сервер пишет: 1
- Системная печать: 1
- Система печатает: j1
- Система печатает: имя
Проблема в том, что я не могу написать строку, потому что она пропускает строку. Как я могу избежать этой проблемы (обратите внимание, что я также пытался for
петля)
Мой код выглядит следующим образом:
int times = client.reciveCommando();
int o = 0;
System.out.println(times);
while (o != times) {
int j = client.reciveCommando();
System.out.println("j"+ j);
String name = client.reciveString();
System.out.println("Name " +name);
createUser(j, name);
o++;
}
Метод createUser:
private void createUser(int j, String reciveChat) {
if (j == 1) {
chatPerson1.setVisible(true);
lbl_Chatperson1_userName.setVisible(true);
lbl_Chatperson1_userName.setText(reciveChat);
} else if (j == 2) {
lbl_chatPerson2.setVisible(true);
lbl_userName2.setVisible(true);
lbl_userName2.setText(reciveChat);
} else {
chatPerson3.setVisible(true);
lbl_userName3.setVisible(true);
lbl_userName3.setText(reciveChat);
}
}
Метод client.reciveCommando:
public int reciveCommando() throws IOException{
Integer i = input.nextInt();
return i;
}
Метод client.reciveString:
public String reciveString(){
String x = input.nextLine();
return x;
}
Надеюсь, кто-нибудь сможет мне помочь с этим:)
Заранее спасибо.
2 ответа
Я нашел решение своего вопроса, оказалось, что это довольно просто!
Прежде всего позвольте мне объяснить, что я имею в виду.
Когда я запустил цикл while, моя программа пропустила строку, в которой должна была быть получена информация с сервера. я обнаружил, что причина этого в том, что input.nextLine(); был пуст, что имеет смысл, когда вы читаете API для input.nextLine();
Продвигает этот сканер за текущую строку и возвращает пропущенный ввод. Этот метод возвращает остаток текущей строки, исключая любой разделитель строк в конце. Позиция установлена в начале следующей строки. Поскольку этот метод продолжает поиск по входным данным в поисках разделителя строк, он может буферизовать все входные данные в поисках строки, чтобы пропустить, если нет разделителей строк. Возвращает: пропущенная строка
так как строка, которую я пытался получить, была пустой строкой, она пропустила бы и установила имя " ".
вот полный полный код моей программы, и в настоящее время она работает:
Цикл while:
while (o != times) {
int j = client.reciveCommando();
System.out.println("j"+ j);
String name = client.reciveString();
System.out.println("Name " +name);
createUser(j, name);
o++;
}
Client.reciveString();
public String reciveString(){
String x = input.next();
return x;
}
CreateUser();
private void createUser(int j, String reciveChat) {
if (j == 1) {
chatPerson1.setVisible(true);
lbl_Chatperson1_userName.setVisible(true);
lbl_Chatperson1_userName.setText(reciveChat);
}else if (j == 2) {
lbl_chatPerson2.setVisible(true);
lbl_userName2.setVisible(true);
lbl_userName2.setText(reciveChat);
}else if (j == 3){
chatPerson3.setVisible(true);
lbl_userName3.setVisible(true);
lbl_userName3.setText(reciveChat);}
Спасибо за все ваши ответы, и я обязательно проголосую за вас:)
Я не вижу нигде в коде цикла, где вы увеличиваете o
или изменить значение times
, Таким образом, либо цикл пропускается полностью (то есть: times = 0), либо какое-то другое место в коде модифицирует либо переменную цикла (o
) или условие цикла (times
) - очень плохое кодирование в любом случае.
Ваши переменные цикла / правила приращения должны быть очень четкими при чтении цикла и легко различать, каковы условия запуска / остановки, без необходимости читать другие методы / и т. Д., Которые могут изменять значения во время итерации цикла.
Мое непосредственное предположение, что times = 0
или вы были бы в бесконечной петле.