当应该为真时,布尔测试返回假?

3

我正在阅读一份过去考试试卷上的问题清单。 其中一个问题是布尔类型。

如果名称不是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? 请问有人能告诉我代码哪里出错了吗? 如果有任何愚蠢的错误,请原谅,因为我还在学习阶段。 非常感谢。

5个回答

6

去掉分号

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

你所写的方式,其实是两个不同的陈述。第一个是如果名称不等于Thomas,则什么也不做。第二个则是返回false。

2
@PrimalScientist: 注意,Zutty已经将return false;移到了与if相同的行上。这是完全不必要的。只需删除分号即可。大多数情况下,您会将return false;行缩进一点,使其在视觉上明显地属于if,并且经常在其周围加上{},就像这样:http://pastie.org/6459258 当然,您也可以像Zutty所做的那样将其移动到同一行上,某些人认为在有限的情况下(比如这个例子)这是可以接受的。 - T.J. Crowder
@T.J.Crowder,Pastie.org看起来很有趣?是另一个好的学习网站吗? - PrimalScientist
不,如果只是删除分号,代码将无法编译。需要在末尾添加 return true; - Dawood ibn Kareem

6

删除if语句末尾的分号

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

同样的好习惯是这样做equals test

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

在这种情况下,如果名称是 null,您将不会收到 NPE

3
如果名称不是Thomas,则该方法应返回false,如果是,则返回true。 您根本不需要使用if语句:
 public static boolean nameTest(String name){
     return name.equals("Thomas");
 }

通常情况下,boolean表达式如果不加if语句和== true / == false更容易阅读。每当你看到从if的分支返回truefalse时,你应该考虑重写它而不需要if语句。


在这个问题中没有if语句,我以为我需要加上它。这是我第一次看到这种布尔语句。非常感谢。 - PrimalScientist
这是需要记住的事情!!问题是我/我们(班级)一直将布尔语句与if语句相关联。 也许我们的讲师会在今后进一步研究这种方法?? 你知道,这真的很好。谢谢。 - PrimalScientist
1
@PrimalScientist 是的,这种东西讲师在某个时候会教给你。重要的是要记住,boolean表达式也是表达式 - 它们不仅仅用于ifwhile语句中,而且它们可以被赋值、返回、相互比较等等。 - Sergey Kalinichenko
非常感谢这个精彩的反馈。所有这些信息都非常有价值,我可以在此基础上继续努力。 谢谢大家。 - PrimalScientist

1

在 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;
    }
}

1
不客气 :) 别忘了接受你喜欢或有帮助解决问题的答案。 - Jeevan Patil

1

最好的做法是直接返回名称是否等于Thomas。不需要使用if语句。

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

另一种提议的解决方案:
if(!name.equals("Thomas")) return false;

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接