Это сложный вопрос для исследования, поэтому, пожалуйста, простите меня, если это дубликат.В то время как цикл выполняется один раз перед запросом
В принципе, у меня есть цикл while, который будет только разорваться, если код, который пользователь сканирует, является целым числом. Я проверяю это, пытаясь Integer.parseInt(integer)
и только разбивает цикл, если исключение NumberFormatException не выбрасывается.
Моя проблема заключается в том, что когда цикл выполняется в первый раз, исключение вызывается без ввода пользователем.
Вот мой код:
Scanner input = new Scanner(System.in);
while (true)
{
System.out.print("Please scan barcode: ");
int inCode = 0;
try
{
inCode = Integer.parseInt(input.next());
}
catch (NumberFormatException e)
{
System.out.println("Numbers only, please.");
}
if (inCode != 0) {
// Do Stuff
} else {
System.out.println("Code can't be zero!");
}
}
Что должно случиться, это:
Отсканируйте штрих-код:
// And here they enter the barcode
Но вместо того, чтобы это произошло:
Сканируйте штрих-код: только номера, пожалуйста.
Отсканируйте штрих-код:
EDIT:
Согласно ответу богемный, я добавил continue
ключевое слово, чтобы мой код. Это решает проблему, но только на полпути. По просьбе людей, у которых мой вопрос приостановлен (с полным основанием, как я теперь вижу), я отправлю SSCCE для вас, ребята. Я собираюсь удалить методы для взаимодействия с базой данных, однако, сохраняя только путь, который имеет проблему: создание новой учетной записи на основе кода.
Scanner input = new Scanner(System.in);
while (true)
{
System.out.print("Please scan barcode: ");
int inCode = 0;
try
{
inCode = Integer.parseInt(input.next());
}
catch (NumberFormatException e)
{
System.out.println("Numbers only, please.");
continue;
}
if (true) // Here it checks if an account associated with the code entered exists in the database. Because I'm having issues when it creates a new account, I've made this true.
{
System.out.println("No account associated with that code! Create one?");
System.out.print("(yes/no): ");
String answer = input.next();
if (answer.equalsIgnoreCase("yes"))
{
System.out.println("Alright.");
System.out.print("Please enter a name: ");
String name = input.next();
System.out.print("Alright. Now I'll add that to the database... ");
// Here I add that to the database. Omitted.
System.out.println("Done! Please scan again to interface.");
}
else if (answer.equalsIgnoreCase("no"))
{
System.out.println("Okay then.");
}
else
{
System.out.println("Defaulting to no.");
}
}
}
// I still haven't written the code to interface with the account.
Что происходит сейчас, он говорит (в первой итерации)
Отсканируйте штрих-код:
Но, пройдя через процесс добавления учетной записи, то петли снова и говорит:
Сканируйте штрих-код: только номера.
Отсканируйте штрих-код:
EDIT:
Пожалуйста, обратите внимание, что все находится внутри while
цикла, так что, когда все, что пользователь сделал закончена, она будет возвращаться к:
Отсканируйте штрих-код:
Что перед этим кодом? –
Какой выход System.out.println (inCode) дает вам после части try-catch при первом запуске цикла while? – user3116916
Как намекнул Сотириос, очень вероятно, что проблема не в этом фрагменте. Можете ли вы опубликовать ВСЕ код, а не только ту часть, где вы думаете, что проблема? –