#java
#java
Вопрос:
Это может быть плохой практикой, но я пытаюсь принимать входные данные от пользователя со следующими условиями: нижняя граница должна быть меньше верхней, ни одна из них не может быть равна нулю
и если какое-либо из этих условий не выполняется, я хочу, чтобы они вводили новые значения для переменных
int lowerBound;
int upperBound;
Scanner input = new Scanner(System.in);
boolean loop = true;
while(loop = true)
{
System.out.println("Enter a lower bound:");
lowerBound = input.nextInt();
System.out.println("Enter an upper bound:");
upperBound = input.nextInt();
if(lowerBound > upperBound || lowerBound <= 0 || upperBound <= 0)
{
System.out.println("Error lowerBound must be less than or equal to upperBound");
System.out.println("Neither may be equal to zero, Try again");
}
else
{
loop = false;
}
}
input.close();
Комментарии:
1.
while(loop=true)
является не только избыточным, но и бесконечным циклом.while(loop)
будет достаточно. Кроме того, в чем проблема? Логика мне кажется прекрасной.2. На самом деле while(loop=true) — это бесконечный цикл. Вы присваиваете значение true.
3. Также
while (1)
сbreak
условием выхода было бы лучшим выбором, имхо.4. @RobertoCaboni Вы имеете в виду
while (true)
, что целое число не является логическим значением в Java.5. @mcemperor да, извините.
Ответ №1:
То, что у вас есть, будет работать, потому что каждый раз, когда условие if не выполняется, цикл while принудительно повторяется. Каждое повторение приведет к тому, что пользователь попадет на ввод без пропущенного ввода. Итак, короткий ответ: да, вы можете изменить переменную в цикле while. Вот как мы эффективно прерываем цикл.
Комментарии:
1. Цикл работает нормально, я скопировал вставленный код для двойной проверки:
2. @Aniox цикл никогда не прерывается из-за опечатки / неправильного сравнения в
while(loop = true)
3. @AlexRudenko Я полагаю, что я уже указывал на это в комментарии к вопросу OP.
Ответ №2:
Это бесконечный цикл, потому что вы помещаете присваивание внутри while, делая цикл всегда истинным, независимо от того, установлено ли для него значение false.
в этом случае можно упростить следующим образом:
int lowerBound;
int upperBound;
Scanner input = new Scanner(System.in);
while(true)
{
System.out.println("Enter a lower bound:");
lowerBound = input.nextInt();
System.out.println("Enter an upper bound:");
upperBound = input.nextInt();
if(lowerBound > upperBound || lowerBound <= 0 || upperBound <= 0)
{
System.out.println("Error lowerBound must be less than or equal to upperBound");
System.out.println("Neither may be equal to zero, Try again");
}
else
{
break;
}
}
input.close();