Java 最优雅的二叉树isEmpty()方法

Java 最优雅的二叉树isEmpty()方法,java,is-empty,Java,Is Empty,我正在尝试为LinkedBinaryTree类编写最优雅的isEmpty()方法 当编译器与if语句交互时,它应该返回一个布尔值或true或false。但是,由于有必要在if语句之外返回一个值,因此我返回了一个值false。我的逻辑是,如果(count==0),isEmpty()将返回true,而不必处理第二行(返回false)。这是正确的吗 public class LinkedBinaryTree<T> implements BinaryTreeADT<T> {

我正在尝试为LinkedBinaryTree类编写最优雅的isEmpty()方法

当编译器与if语句交互时,它应该返回一个布尔值或true或false。但是,由于有必要在if语句之外返回一个值,因此我返回了一个值false。我的逻辑是,如果(count==0),isEmpty()将返回true,而不必处理第二行(返回false)。这是正确的吗

public class LinkedBinaryTree<T> implements BinaryTreeADT<T>
{
   protected int count;
   protected BinaryTreeNode<T> root; 

   /**
    * Creates an empty binary tree.
    */
   public LinkedBinaryTree() 
   {
      count = 0;
      root = null;
   }

   /**
    * Creates a binary tree with the specified element as its root.
    *
    * @param element  the element that will become the root of the new binary tree
    */
   public LinkedBinaryTree (T element) 
   {
      count = 1;
      root = new BinaryTreeNode<T> (element);
   }

   /**
    * Returns true if this binary tree is empty and false otherwise.
    *
    * @return  true if this binary tree is empty
    */
   public boolean isEmpty() 
   {
       if (count == 0);
       return false; 
   }
公共类LinkedBinaryTree实现BinaryTreeADT
{
保护整数计数;
受保护的金钱草根;
/**
*创建一个空的二叉树。
*/
公共链接的二进制树()
{
计数=0;
root=null;
}
/**
*创建以指定元素为根的二叉树。
*
*@param element将成为新二叉树根的元素
*/
公共链接二进制树(T元素)
{
计数=1;
根=新的二元树烯(元素);
}
/**
*如果此二叉树为空,则返回true;否则返回false。
*
*@如果此二叉树为空,则返回true
*/
公共布尔值为空()
{
如果(计数=0);
返回false;
}
“这是正确的吗?”--您可以通过测试找到答案。我建议您这样做,最好是在jUnit测试中:

 @Test
 public void isEmpty_returns_true_for_empty_list() {
     LinkedBinaryTree tree = new LinkedBinaryTree();
     assertTrue(tree.isEmpty());
 }
…以及对非空树的类似测试

“最优雅”

我会选择其中一种:

public boolean isEmpty() {
   return count == 0;
}
……或者

public boolean isEmpty() {
   return root == null;
}
(您确定您的实现需要一个
count
变量吗?)


Java和C一样,允许您在
if
语句中省略大括号。一个常见的建议是永远不要省略大括号,因为这会导致混淆

您所写的内容相当于:

 if(count == 0) {
 }
 return false;
所以它总是返回false

你可以写:

 if(count == 0) {
    return true;
 }
 return false;
或不带支架(不推荐):


但由于这相当于
返回计数==0
,因此使用
if
语句是不雅观的。

您可以只返回条件而不使用“if”语句

public boolean isEmpty() {
   return (count == 0);

}

不,不是
如果忽略以分号结尾的
语句,您的方法将始终返回
false
。而且,
count
在您的上下文中是无用的。当定义根时,它会增加到1,所以如果(root==null)返回true,您只需执行
;否则返回false,或更短的,
返回根==null
如果(计数==0)技术上什么都不做。你想干什么。也许你只是想要
返回计数==0?可以在if语句中返回。您还必须确保每个路径都返回,这听起来好像是错误的。“这是正确的吗?”--您可以通过测试找到答案。您也不需要括号。正确。在我看来,括号增加了代码的清晰度(可读性),但就代码而言,无论有无括号,它都能正常工作them@MichaelGantman它们当然有,但有一个条件,它们在我看来是无用的。。。如果您有更多和/或您可能会添加括号以提高清晰度,但只有一个条件不会影响清晰度:)太好了,感谢使用Junit测试的提示。我以前从没听说过。所谓优雅,我指的是最简洁的(但你明白了,哈哈)。谢谢你的回复,我理解得更清楚了:)不客气。但是请注意,有时最简洁的代码并不是最优雅的(或者我们都使用一个字符的变量名)。
public boolean isEmpty() {
   return (count == 0);