【问题标题】:If statement always giving the same answer如果语句总是给出相同的答案
【发布时间】:2011-09-15 02:14:36
【问题描述】:
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!");        
    }

}
}

谁能解释一下为什么这个程序会返回“有足够的零食给所有的仓鼠!”不管是否“neededTreats”>“treatsPerHamster”?

谢谢。

【问题讨论】:

  • 另一件事。如果您要将布尔值作为条件,则根本不应该执行“==”。至少我被教导这是不好的做法。这就像说 if ( ( enoughTreats is true ) is true )
  • 虽然这与问题无关,但您需要这些扫描仪做什么?
  • 以下答案的补充。你的 else if 没有意义。布尔值可以为真或假,仅此而已。所以只需使用if(){...}else{...}
  • "enoughTreats = false" 总是返回 true,因为分配确实发生了。

标签: java if-statement boolean


【解决方案1】:

您应该使用== 而不是=

    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
}

【讨论】:

    【解决方案2】:

    您正在将值 true 分配给 enoughtreats。

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

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

    或者简单地说:

    if(enoughtreats) {
    ...
    }
    

    【讨论】:

      【解决方案3】:

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

      if (enoughTreats = true)
      

      将值“true”分配给“enoughTreats”,然后检查“enoughTreats”是否为真(它总是如此)。

      相反,你想放

      if (enoughTreats == true)
      

      这样它就会检查 enoughTreats 是真还是假。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          if (enoughTreats = true)

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

          【讨论】:

            【解决方案6】:

            你需要改变这两个语句

            if (enoughTreats = true) 
            
            else if (enoughTreats = false)
            

            进入

            if (enoughTreats == true) 
            
            else if (enoughTreats == false)
            

            您还可以通过在下面输入以下内容来缩短代码并获得完全相同的效果:

            if (enoughTreats)
            
            else
            

            如果您在 if 语句的括号内单独放置一个布尔变量,if 语句将检查它是否为真,因此您无需键入“== true”。您还可以将代码中的 else if 语句替换为简单的“else”,因为如果 enoughTreats 变量不等于 true,则 else 代码将自动执行,而无需您专门声明条件。

            【讨论】:

              【解决方案7】:

              需要注意并添加到列出的答案中的几件事

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

              【讨论】:

                猜你喜欢
                • 2019-09-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-06-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-04-23
                相关资源
                最近更新 更多