2017-03-29 11 views
-1

私はLinkedBinaryTreeクラスのために最もエレガントなisEmpty()メソッドを作成しようとしています。最もエレガントなisEmpty()バイナリツリーのメソッド

コンパイラがifステートメントと対話するときは、ブール値またはfalseのいずれかを返す必要があります。しかし、の外にの値を返す必要があるので、私はfalseの値を返しました。私のロジックはif(count == 0)で、isEmpty()はtrueを返し、2行目で気​​にしません(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; 
    } 
+1

せずにあなたの状態を返すことができます。セミコロンで終了する 'if'文は無視されますが、メソッドは常に' false'を返します。また、 'count'はあなたの文脈では役に立たない。ルートが定義されているときには1に増やされるので、 'if(root == null)はtrueを返します。それ以外の場合はfalseを返す '、より短い、' return root == null' – BackSlash

+4

'if(count == 0);'は技術的に何もしません。あなたは何をしようとしているのですか。たぶん 'return count == 0;'? –

+0

if文で返すことができます。あなたはまた、すべてのパスが戻ってくることを確認しなければならないし、それは間違っていたように聞こえる。 – user1675642

答えて

2

「これは正しいですか?」あなたはそれをテストすることで見つけ出すことができます。理想的には、jUnitテストでこれを行うことをお勧めします。

@Test 
public void isEmpty_returns_true_for_empty_list() { 
    LinkedBinaryTree tree = new LinkedBinaryTree(); 
    assertTrue(tree.isEmpty()); 
} 

...非空のツリーについても同様のテストを行います。

「最も優雅」?

Iのいずれかのために行くだろう。おそらく

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; 

または中カッコなし(推奨しませんが):

if(count == 0) 
    return true; 
return false; 

しかし、これはreturn count == 0と等価であるから、それはifステートメントを使用して洗練ます。

+0

素晴らしい、Junitテストを使用するチップのおかげで。私はこれまで聞いたことがない。そしてエレガントで、私は最も簡潔であることを意味しました(しかし、あなたはそれを笑ってしまったのです)。応答のおかげで、私ははるかに明確に理解しています:) –

+0

あなたはようこそ。しかし、時には、最も簡潔なコードが最もエレガントではないこともあります(または、すべて1文字の変数名を使用しています)。 – slim

0

あなたはいいえ、それはない "あれば" 文

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

}

+0

かっこは必要ありません。 – Moira

+0

正しい。私の意見では、括弧はコードの明確さ(可読性)に追加されますが、コードがあればそれは同じでもなくても同じに動作します –

+0

@MichaelGantman彼らは確かに行いますが、単一の条件では無駄なIMOです...もしあなたがより明確にするためにかっこを追加することもできますが、1つの条件で明瞭性には影響しません:) – BackSlash

関連する問題