Можно ли назначить переменную внутри цикла while в Java

#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();