如果声明总是给出相同的答案
import java.util.Scanner; class Practice { public static void main(String args[]) { System.out.println("Enter the number of treats you have:"); Scanner treatsScanner = new Scanner(System.in); int treats = (treatsScanner.nextInt()); System.out.println("Enter the number of hamsters you have:"); Scanner hamstersScanner = new Scanner(System.in); int hamsters = (hamstersScanner.nextInt()); System.out.println("How many treats does each hamster need?"); Scanner neededTreatsScanner = new Scanner(System.in); int neededTreats = (neededTreatsScanner.nextInt()); int treatsPerHamster = treats / hamsters; boolean enoughTreats = treatsPerHamster >= neededTreats; if (enoughTreats = true) { System.out.println("There are enough treats for all the hamsters!"); } else if (enoughTreats = false) { System.out.println("Oh no! There aren't enough treats!"); } } }
有人可以向我解释为什么这个程序会返回“所有仓鼠都有足够的食物!” 无论“needTreats”>“treatsPerHamster”?
谢谢。
您将值true赋给enoughtreats。
尝试使用相等运算符而不是赋值:
if (enoughtreats == true) { ... }
或者干脆:
if(enoughtreats) { ... }
你应该使用==
而不是=
if (enoughTreats == true) { System.out.println("There are enough treats for all the hamsters!"); } else { System.out.println("Oh no! There aren't enough treats!"); }
请记住, ==
是比较运算符, =
是赋值运算符。
就像迈克提到的那样,只要if(enoughTreats)
会为你做这个伎俩。 无需使用==
运算符!
事实上,你根本不需要布尔变量enoughTreats
。 你可以像这样写你的条件:
if (treatsPerHamster >= neededTreats) { // do one thing } else { // do other }
在java中,’=’运算符为变量赋值。 在这种情况下,
if (enoughTreats = true)
将值’true’赋值给’enoughTreats’,然后检查’enoughTreats’是否为真(它总是如此)。
相反,你想要
if (enoughTreats == true)
这样它就会检查是否有足够的事情是真是假。
使用==
表示相等,而不是=
。
if (enoughTreats = true)
通过使用=
,您可以为enoughTreats
分配true
。 请改用==
比较运算符。
您需要更改这两个语句
if (enoughTreats = true) else if (enoughTreats = false)
成
if (enoughTreats == true) else if (enoughTreats == false)
您还可以通过简单地键入以下内容来缩短代码并获得完全相同的效果:
if (enoughTreats) else
如果你将一个布尔变量放在if语句的括号内,if语句将检查它是否为真,因此你不需要输入’== true。’ 您还可以使用简单的’else’替换代码中的else if语句,因为如果enoughTreats变量不等于true,则else代码将自动执行而无需您特别声明条件。
很少有事情需要注意并添加到列出的答案中
- 只需一台扫描仪就足够了
Scanner inputScanner = new Scanner(System.in);
- 大括号
(...Scanner.nextInt());
没有必要 - 您可能需要考虑对
hamsters
非零检查! - 处理输入中的非Ints和-ve数字
-
else if(){}
if(){}
只有一个布尔检查,则不需要if(){}
,只需一个else{
就足够了