Может кто-нибудь объяснить, как работает логическое значение в этом коде? - PullRequest
1 голос
/ 29 мая 2020

Этот вопрос больше нужен для понимания части кода, с которой я работаю. «Действительное» логическое значение в строке 1 становится условием для оператора while в строке 2. Когда вы помещаете логическое значение в условие while, это автоматически меняет логическое значение? Я не понимаю, как, если действительный инициализируется как ложь, он когда-либо станет истинным за пределами while l oop - если что-то не связано с тем, что он находится в условии while? Я включаю часть кода, чтобы вы могли видеть, что происходит. Это часть калькулятора дробей, который я пытаюсь понять.

Спасибо за помощь!

boolean valid = false;   
while (!valid) {
    System.out.println("Please enter a Fraction a/b or integer (a): ");
    firstFraction = scan.nextLine();
    valid = validFraction(firstFraction);
    if (valid) {
        int findSlash = firstFraction.indexOf("/");
        if (findSlash >= 0) {
            firstFractionNumerator = Integer.parseInt(firstFraction.substring(0, findSlash));
            firstFractionDenominator = Integer.parseInt(firstFraction.substring(findSlash + 1, firstFraction.length()));
        } 
        else {
            firstFractionNumerator = Integer.parseInt(firstFraction.substring(0, firstFraction.length()));
            firstFractionDenominator = 1;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Согласно коду, это не должно быть истинным за пределами while l oop. Концепция l oop заключается в том, чтобы работать до тех пор, пока не будет найдена допустимая firstFraction. Другими словами; код будет продолжать запрашивать ввод, пока пользователь не предоставит действительный (действительный для правил кода в методе validFraction).

Затем он принимает этот действительный ввод и обрабатывает его, то, что в if (valid) {} не имеет отношения к l oop принятие решений, и это просто для проверки погоды, вводится a / b или целое число. Затем l oop завершается, и код переходит к тому, что реализовано через while l oop.

В заключение, l oop - это хорошо.

0 голосов
/ 29 мая 2020

Просто подумайте об этом концептуально. Цель состоит в том, чтобы получить действительную дробь. До того, как вы спросили пользователя, у вас нет дроби, поэтому она недействительна. Затем вы спрашиваете пользователя, и он может быть действительным или недействительным. Если он действителен, вы можете выйти из l oop, потому что вы преуспели, если он недействителен, вам нужно спросить их снова, поэтому вам нужно снова l oop.

Рассмотрим этот простой пример . Мы продолжим l oop, если сделаем случайное число от 6 до 10, и выйдем, если выберем число 0-5

boolean shouldContinue = true;

while(shouldContinue) {
    shouldContinue = new Random().nextInt(10) > 5;
}
...