如果声明总是给出相同的答案

时间:2011-06-14 22:04:40

标签: java if-statement boolean

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”?

谢谢。

7 个答案:

答案 0 :(得分:7)

您应该使用==代替=

    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
}

答案 1 :(得分:4)

您将值true赋值为enoughtreats。

尝试使用等于运算符而不是赋值:

if (enoughtreats == true) {
...
}

或简单地说:

if(enoughtreats) {
...
}

答案 2 :(得分:3)

在java中,'='运算符为变量赋值。在这种情况下,

if (enoughTreats = true)

将值'true'赋给'enoughTreats',然后检查'enoughTreats'是否为真(它总是如此)。

相反,你想要放

if (enoughTreats == true)

这样它就会检查是否有足够的事情是真是假。

答案 3 :(得分:1)

使用==表示相等,而不是=

答案 4 :(得分:1)

if (enoughTreats = true)

使用=,您要将true分配给enoughTreats。请改用==比较运算符。

答案 5 :(得分:0)

您需要更改这两个陈述

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代码将自动执行而无需您特别声明条件。

答案 6 :(得分:0)

很少有事情要注意并添加到列出的答案中

  • 只需一台扫描仪即可Scanner inputScanner = new Scanner(System.in);
  • (...Scanner.nextInt());周围的大括号不是必需的
  • 您可能需要考虑hamsters
  • 的非零检查
  • 处理非Ints&输入中的-ve数字
  • else if(){}只进行一次布尔检查时,
  • if(){}不是必需的,只需else{就足够了