Как выполнить сравнения равенства в блоке if-else в Java?

#java #if-statement

#java #оператор if

Вопрос:

Я новичок в Java, но я заблудился в приведенном ниже коде. Это не выводит стоимость:

 boolean Smart;
boolean Flat;
int smallsmart = 322;
int largesmart = 405;

void price(){
    Scanner in = new Scanner(System.in);
    System.out.printf("%nWhat Type of TV would you like Smart of Flat ???  ");//Prompts
    boolean TV = in.next() != null;

    System.out.println("What Size would you like 32 or 42 inch ?? ");//Prompts
    int Size = in.nextInt();    

    if (TV = Smart amp;amp; Size == 32){//start of if 
        System.out.println("The Price of your Tv is "   smallsmart);    
    } else if (TV = Smart amp; Size == 42){//start of if 
        System.out.println("The Price of your Tv is "   largesmart);
    }
  

Комментарии:

1. in.next() != null всегда имеет значение true.

2. Добро пожаловать в Stack Overflow! Похоже, вам нужно научиться использовать отладчик. Пожалуйста, воспользуйтесь некоторыми дополнительными методами отладки . Если после этого у вас все еще будут проблемы, пожалуйста, не стесняйтесь вернуться с более подробной информацией.

3. TV = Smart это не сравнение, а присвоение

Ответ №1:

Значение Smart будет равно false (значение по умолчанию boolean)

В условии if и else if вы упомянули TV = Smart , которое будет false для обоих условий. Вот почему он ничего не печатает.

Пожалуйста, исправьте свой код. TV == SMART

Ответ №2:

in.next() != null всегда имеет значение true.
Smart всегда равно false, поскольку имеет значение по умолчанию.
So TV == Smart также всегда равно false.

Вы хотите

 String TV = in.next();
// ...
if (TV == "Smart" amp;amp; ...
  

или

 boolean smart = in.next() == "Smart";
// ...
if (smart amp;amp; ...
  

Ответ №3:

 boolean smart;
boolean flat;
int smallSmart = 322;
int largeSmart = 405;

void price(){
    Scanner in = new Scanner(System.in);
    System.out.println("What Type of TV would you like Smart of Flat ???");
    String typeOfTv = in.nextLine().toLowerCase();

    if(typeOfTv.equals("smart")) {
        smart = true;
    } else if(typeOfTv.equals("flat")) {
        flat = true;
    } else {
        System.out.println("You have not selected an appropritate TV. Exiting...");
        System.exit(0);
    }

    System.out.println("What Size would you like 32 or 42 inch ?? ");//Prompts
    int size = in.nextInt();    

    if (smart amp;amp; size == 32){//start of if 
        System.out.println("The Price of your Tv is "   smallSmart);    
    } else if (smart amp; size == 42){//start of if 
        System.out.println("The Price of your Tv is "   largeSmart);
    }
}
  

Прежде всего, я бы порекомендовал вам называть переменные в соответствии с соглашением camel case.

Здесь вы назначаете TV Smart

 TV = Smart
  

= используется для присвоения значений переменным, а == используется для сравнения.

Ответ №4:

Вы не присвоили значение как интеллектуальным, так и плоским логическим значениям.

1 знак равенства = означает присвоение нового значения. 2 знака равенства означают сравнение двух значений, так что TV = Smart фактически означает, что вы присваиваете значение Smart вашей TV переменной.

Вы должны изменить его на if (TV == Smart)

Ответ №5:

Есть несколько вещей, которые вы должны иметь в виду.

Во-первых, я советую вам ознакомиться с соглашением об именовании Java. Ваши переменные, в соответствии с примером, должны быть в нижнем регистре ( smart вместо Smart ). Вот ссылка на документ Oracle об этом: http://www.oracle.com/technetwork/java/codeconventions-135099.html


Во-вторых, существует большая разница между = и == . Первое — это присвоение, второе — сравнение.


В-третьих, разница не такая уж большая, но вы должны хорошо выбирать между использованием только одного amp; или двух. В if операторах это немного сложнее. С одним ( amp; ) это просто означает И, с двумя ( amp;amp; ) это также означает И, с поправкой: это «короткое замыкание».

Что такое «короткие замыкания»? в резюме включается математика. В этом случае:

1 И ‘something’ = ‘что-то’;

0 И ‘something’ = 0 (С amp;amp; сокращением-cricuit)

Shurt-circuit хорош, когда в if сообщении вы хотите проверить, является ли определенная переменная null ПЕРЕД ее использованием, чтобы избежать выдвижения NullPointerException . Вот так:

 if( variable != null amp;amp; variable.isSomething() ) {
    //do stuff
}
  

Если переменная variable равна null (следовательно, variable != null является false ), произойдет короткое замыкание на false , и она не выдаст исключение, потому что она не будет пытаться прочитать несуществующую переменную.

Я советую вам всегда выполнять вычисления с коротким замыканием.

То же самое происходит с функцией OR. У вас есть простой | и с коротким замыканием || . В этом математика такова:

0 ИЛИ ‘что-то’ = ‘something’

1 ИЛИ ‘something’ = 1 (С || сокращением-cricuit)


Далее, будьте осторожны при написании таких вещей, как boolean TV = in.next() != null; , в случае on Scanner (я уверен в этом) он не вернет null, но может вернуть пустое String значение.

Надеюсь, я помог.

Хорошего дня. 🙂