#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
значение.
Надеюсь, я помог.
Хорошего дня. 🙂