【问题标题】:Boolean test returning false when it should be true?布尔测试在应该为真时返回假?
【发布时间】:2013-03-12 10:59:17
【问题描述】:

我正在查看一份过去试卷上的问题列表。 其中一个问题是布尔类型的。

如果名字不是 Thomas,它应该返回 false,如果是,则返回 true。

这是我的代码:

public class QuestionTwo
{   
String name;

public static void main(String [] args){

    System.out.println(nameTest("Thomas"));   
}
public static boolean nameTest(String name){
    if(!name.equals("Thomas"));
    return false; 
 }
}

如您所见,我的代码应该返回 true,但它一直返回 false? 有人可以告诉我我的代码似乎哪里出了问题吗? 请原谅我仍在学习中发现的任何愚蠢错误。 非常感谢。

【问题讨论】:

    标签: java boolean


    【解决方案1】:

    去掉分号

        if(!name.equals("Thomas")) return false; 
    

    按照您的编写方式,它是两个单独的语句。首先,如果 name 不等于 Thomas,则什么也不做。然后第二个,返回false。

    【讨论】:

    • @PrimalScientist:请注意,Zutty 已将 return false; 移动到与 if 相同的行。这完全没有必要。只需删除分号即可。大多数情况下,您要么将return false; 行缩进if 下一点,因此在视觉上明显它从属于它,并经常将{} 放在它周围,就像这样:pastie.org/6459258或者,当然,将它移到 Zutty 所做的同一行,有些人认为这在有限的情况下是可以接受的(比如这个)。
    • @T.J.Crowder Pastie.org 看起来很有趣?另一个学习的好网站?
    • 不,如果您只是删除分号,代码将无法编译。需要在末尾加上return true;
    【解决方案2】:

    删除if statement 末尾的分号

     if(!name.equals("Thomas"))
    

    另外一个好的做法是这样equals test

     if(!"Thomas".equals(name))
    

    在这种情况下,如果 name 为 null,您将不会得到 NPE

    【讨论】:

    • 谢谢!! =] 你的反馈很棒!
    【解决方案3】:

    如果名称不是 Thomas,[方法] 应该返回 false,如果是,则返回 true。

    您根本不需要if

     public static boolean nameTest(String name){
         return name.equals("Thomas");
     }
    

    一般来说,boolean 表达式在没有 ifs 和 == true / == false 的情况下更易于阅读。每次看到从 if 的分支返回 truefalse 时,您应该考虑在不使用 if 语句的情况下重写它。

    【讨论】:

    • 在问题中没有if语句,我以为我必须把它放进去。这是我第一次看到这种类型的布尔语句。非常感谢。
    • 这是要记住的事情!!事情是我/我们(类)总是将布尔语句与 if 语句相关联。这可能是我们的讲师可能会进一步考虑以这种方式进行的事情?你知道这真的很好。谢谢。
    • @PrimalScientist 是的,讲师会在某个时候教你。要记住的重要一点是boolean 表达式也是表达式——它们不仅用于ifs 和whiles,还可以分配、返回、相互比较等等。
    • 非常感谢您的反馈。所有这些信息都非常棒,我可以以此为基础。谢谢大家。
    【解决方案4】:

    在 if 和 return 语句之后放置分号使它们成为单独的语句。 代码应该是这样的:

    public class QuestionTwo {   
        String name;
    
        public static void main(String [] args){
            System.out.println(nameTest("Thomas"));   
        }
    
        public static boolean nameTest(String name){
            if(!"Thomas".eqauals(name)) {
                return false;
            }
            return true;
        }
    }
    

    【讨论】:

    • 不客气 :) 不要忘记接受您喜欢或帮助解决您的问题的答案。
    【解决方案5】:

    最好的办法是准确返回名称是否等于 Thomas。不需要做if语句

    public static boolean nameTest(String name){
      return name.equals("Thomas"); 
    }
    

    另一个建议的解决方案:

    if(!name.equals("Thomas")) return false;
    

    不会编译,因为如果名称不是 Thomas,则没有返回值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-10
      • 2014-12-01
      • 2021-08-09
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      相关资源
      最近更新 更多