编译错误的东西丢失

时间:2015-07-01 11:15:26

标签: java data-structures tree

我对这个简单的问题一点帮助。我收到了编译器错误,但是 我不知道如何删除此错误。 在此行显示错误int n = totalTree(num);
这是我的代码:

public class TotalNumberOfBinaryTrees {

    //static int elementCount = 50;

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int test =sc.nextInt();
        while(test>0){
            int num = sc.nextInt();
            int n = totalTree(num);
            System.out.println("totalTree"+n);
            test--;
        }
    }

    public int totalTree(int n) {
    if (n == 1 || n == 0)
            return 1;
    else {
            int left = 0;
            int right = 0;
            int sum = 0;
            for (int k = 1; k <= n; k++) {
        left = totalTree(k - 1);
        right = totalTree(n - k);
        sum = sum + (left * right);
            }
    return sum;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

totalTree是一种非静态方法。您无法通过静态方法(main)调用它,而无需创建类的实例。

我不确定它是否有意义,但您可以通过以下方式调用它:

int n = new TotalNumberOfBinaryTrees().totalTree(num);

或将其更改为静态方法。

答案 1 :(得分:1)

您无法从静态方法访问非静态方法,因此请将方法声明为:

public static int totalTree(int n) {}  

现在,以下代码没有编译问题:

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int test =sc.nextInt();
        while(test>0){
            int num = sc.nextInt();
            int n = totalTree(num);
            System.out.println("totalTree"+n);
            test--;
        }
    }

    public static int totalTree(int n) {
        if (n == 1 || n == 0)
            return 1;
        else {
            int left = 0;
            int right = 0;
            int sum = 0;
            for (int k = 1; k <= n; k++) {
                left = totalTree(k - 1);
                right = totalTree(n - k);
                sum = sum + (left * right);
            }
            return sum;
        }
    }