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