Почему не меняется значение логического выражения?(Джава) - PullRequest
0 голосов
/ 07 декабря 2018

Вот код, о котором я спрашиваю:

int price = 0;
boolean isFree = (price == 0);

if (isFree) {
     price = 10;
     if (isFree)
         System.out.println("one");
     else
         System.out.println("two");
}

Итак, я просто хочу знать, почему переменная isFree остается истинной, а переменная цены меняется на 10. Другими словами, почемупеременная цены переключается на 10, не влияя на логическое выражение?

Ответы [ 4 ]

0 голосов
/ 07 декабря 2018

Поскольку значение переменной isFree было установлено один раз, когда вы ее определили.Если вы хотите, чтобы переменная isFree имела другое значение, вам нужно установить его.

Вы можете изменить определение isFree на метод:

private boolean isFree(int price) {
    return price == 0;
}

Тогда в любое время, когда вы захотите узнатьесли цена свободна, вы можете вызвать метод isFree:

int price = 0;

if (isFree(price)) {

    price = 10;

    if (isFree(price))
        System.out.println("one");
    else
        System.out.println("two");
}
0 голосов
/ 07 декабря 2018

Используя два оператора isFree, вы в основном отменяете условие, делая его истинным (статическим) и не проверяя новое динамическое условие.

int price = 0;

boolean isFree = (price == 0);

if (isFree){
 price = 10;
 System.out.println("one");
}
else{
 System.out.println("two");
}
0 голосов
/ 07 декабря 2018

После инициализации с помощью boolean isFree = (price == 0); переменная isFree определяется как true.

, она не будет изменена, даже если price изменяется, если вы не измените ее явно (например,снова звоню boolean isFree = (price == 0);).

0 голосов
/ 07 декабря 2018

Это остается тем же, потому что вы не проверяете логическую переменную снова после сравнения в первый раз.Если бы у вас была другая

isFree = (price == 0);

после проверки и переназначения цены на 10, то это было бы ложно.

...