将JavaScript转换为Java,仍然存在错误

时间:2015-01-22 03:29:47

标签: java javascript

我在JavaScript中制作了一个算法,并尝试将其转换为Java。我没有太多使用Java的经验,并且在尝试编译此代码时遇到错误,而且我不确切地知道语法有什么问题。我已经完成了一些研究,但也许我在函数调用,递归过程中缺少一些东西。是的,我必须将数字作为字符串返回。

public class Answer {
    public static String answer(int l, int r, int n) { 

        int acc = 0;

        for (int k=1; k<=n; k++) {
            acc += comb(n-1, k-1) * f(k-1, l-1) * f(n-k, r-1);
        }
        return acc;

    }

    public static int f(int n, int l) {
        if (n==l) {
            return 1;
        }  else if (n<l) {
            return 0;
        } else {
            int acc = 0;
            for (int k=1; k<=n; k++) {
                acc += comb(n-1, k-1) * f(k-1, l-1) * fact(n-k);
            }
            return acc;
        }

    }


    public static int comb(int n, int k){
        return fact(n) / (fact(k) * fact(n-k));
    }


    public static int fact(int n) {
        int acc = 1;
        for (int i=2; i<=n; i++) {
            acc *= i;
        }
        return acc;
    }

}

1 个答案:

答案 0 :(得分:0)

编译得很好:javac Answer.java

但错误代码显示:

Answer.java:9: error: incompatible types
        return acc;
               ^
  required: String
  found:    int

当函数指定String作为返回类型时,表示在第9行中我们返回了一个int。

根据您的需要,有两种可能的解决方案,将您的功能更改为:

public static int answer(int l, int r, int n) { 

    int acc = 0;

    for (int k=1; k<=n; k++) {
        acc += comb(n-1, k-1) * f(k-1, l-1) * f(n-k, r-1);
    }
    return acc;

}

public static String answer(int l, int r, int n) { 

    int acc = 0;

    for (int k=1; k<=n; k++) {
        acc += comb(n-1, k-1) * f(k-1, l-1) * f(n-k, r-1);
    }
    return String.valueOf(acc);

}