#java
#java
Вопрос:
Я работал над этой простой проблемой в течение нескольких часов и ничего не добился. Я пытаюсь проверить, что число, введенное в мою программу, находится в диапазоне от 1 до 12. Я пробовал несколько видов циклов, но получаю различные ошибки и проблемы, которые я подробно описал в комментариях в верхней части примера кода:
//This gives me an error saying that the local variable deptMonth may not have
//been initialized
boolean monthCorrect;
int deptMonth;
Scanner input = new Scanner(System.in);
do
{
System.out.print("Please input the month (1-12): ");
if (input.hasNextInt())
{
if ((input.nextInt()) <= 12 amp;amp; (input.nextInt()) >=1)
{
deptMonth = input.nextInt();
monthCorrect = true;
}
else
{
System.out.println("I don't understand try again.");
monthCorrect = false;
input.next();
}
}
else
{
System.out.println("I don't understand try again.");
monthCorrect = false;
input.next();
}
}while (!(monthCorrect));
Есть ли более простой и правильный способ сделать это?
Спасибо.
Комментарии:
1.
((input.nextInt()) <= 12 amp;amp; (input.nextInt()) >=1)
— не делайте этого. Если вы вызоветеnextInt()
дважды, ваша программа попытается прочитать два отдельных числа. Вызовите его один раз и присвоите переменной.
Ответ №1:
Вы вызываете метод nextInt
повторно. Разве это не поглотит несколько входных токенов? Попробуйте это: вызовите nextInt
только один раз и присвоите это переменной, давайте назовем ее foo
. Затем проверьте foo
, находится ли оно в правильном диапазоне, и если да, назначьте foo
deptMonth
.
Ответ №2:
Как сказал Роберт, вам нужно присвоить input.nextInt()
переменной внутри цикла do . Многократный вызов этого метода приводит к тому, что вам приходится вводить значение несколько раз. Итак, для того, чтобы ваш код работал, он должен выглядеть примерно так:
boolean monthCorrect;
int deptMonth;
Scanner input = new Scanner(System.in);
do
{
System.out.print("Please input the month (1-12): ");
if (input.hasNextInt())
{
int tmp = input.nextInt();
if ((tmp) <= 12 amp;amp; (tmp) >=1)
{
deptMonth = tmp;
monthCorrect = true;
}
else
{
System.out.println("I don't understand try again.");
monthCorrect = false;
}
}
else
{
System.out.println("I don't understand try again.");
monthCorrect = false;
}
}while (!(monthCorrect));
Кроме того, я не знаю, продолжаете ли вы ввод или нет, но рекомендуется закрывать сканер, как только вы закончите с ним, чтобы предотвратить проблемы с памятью и тому подобное.
Итак,
if ((tmp) <= 12 amp;amp; (tmp) >=1)
{
deptMonth = tmp;
monthCorrect = true;
}
Должно выглядеть так:
if ((tmp) <= 12 amp;amp; (tmp) >=1)
{
deptMonth = tmp;
monthCorrect = true;
input.close();//This keeps everything tidy! Also eclipse should give you a warning message if you forget to include it!
}
Комментарии:
1. Я думаю, вам следует проверить это в случае, когда пользователь вводит что-то, что не является числом. Мне кажется, что вы попадете в бесконечный цикл.
2. На самом деле, я использовал input.nextInt() , поэтому он будет блокироваться до тех пор, пока не будет введено ЦЕЛОЕ число. Но спасибо за -1, приятель, очень приятно.