1

私のC#コード:

public int printallancestor(Node root, Node key)
{
     if(root == null)
          return 0;
     if(root == key)
          return 1;
     if(printallancestor(root.leftChild,key)||printallancestor(root.rightChild,key))
     {
          Console.WriteLine(root.iData);
          return 1;
     }
     return 0;
}

if(printallancestor(root.leftChild,key)||printallancestor(root.rightChild,key))上記のコードの次の行は、タイプ 'int' および 'int' のオペランドには適用できません。これの何が問題なのですか?

4

5 に答える 5

4

あなたの方法のように見えます:

printallancestor(root.leftChild,key)

整数値を返し、それを条件で使用しようとしています。現在行っているような状態でのみブール型を使用できます

1メソッドが true と false をそれぞれ返すことを期待していると思います0。現在 C# で行っていることはできません。あなたは試すことができます:

if(printallancestor(root.leftChild,key) == 1|| .... 

または、1 より大きい値が true であると予想している場合は、次のようになります。

if(printallancestor(root.leftChild,key) > 1) // true

次のように表示されます:
|| 演算子 (C# リファレンス)

条件付き OR 演算子 (||) は、bool オペランドの論理 OR を実行します。最初のオペランドが true と評価された場合、2 番目のオペランドは評価されません。最初のオペランドが false と評価された場合、2 番目の演算子は、OR 式全体が true と評価されるか false と評価されるかを決定します。

于 2012-12-25T07:05:07.110 に答える
0

printallancestor の戻り値の型は int です。|| を使用しています ブール用の演算子。試す

if(printallancestor(root.leftChild,key) != 0||printallancestor(root.rightChild,key) != 0)

問題を解決する必要があります。

于 2012-12-25T07:06:17.873 に答える
0

演算子 OR (||) には、int ではなく 2 つの bool オペランドが必要です。

于 2012-12-25T07:06:17.897 に答える
0

メソッドは を返しますintが、if 条件で使用しようとしています。それは大丈夫ではありません。条件のみboolのタイプで使用できます。

このようにしてみてください。

if(printallancestor(root.leftChild,key) == 1|| ..  

条件付き OR 演算子 (||) は、bool オペランドの論理 OR を実行します。

于 2012-12-25T07:07:04.073 に答える
0

これを行う

 public bool printallancestor(Node root, Node key)
    {
        if(root == null)
            return false;
        if(root == key)
            return true;
        if(printallancestor(root.leftChild,key)||printallancestor(root.rightChild,key))

        {
            Console.WriteLine(root.iData);
            return true;
        }
        return false;
    }
于 2012-12-25T07:07:25.303 に答える