"缺少退货声明" - 不会编译

时间:2015-01-07 06:53:30

标签: java methods compiler-warnings

以下方法应将2的幂从0返回到n。但是,由于缺少return语句,我收到的错误表明我的代码没有编译。 注意:这是来自与我的教科书相关的在线站点(构建Java程序,3E,Reges& Stepp)。我们只应该编写问题陈述中描述的方法。

public static int printPowersof2(int n) {
    for (int i = 0; i <= n; i++) {
        int number = (int) Math.pow(2, i);
        return number; 
    }
}

5 个答案:

答案 0 :(得分:3)

你必须在循环之外有一个return语句,因为如果n是负数,那么循环可能根本不会执行,在这种情况下该方法不会有返回值。

public static int printPowersof2(int n) {
    for (int i = 0; i <= n; i++) {
        int number = (int) Math.pow(2, i);
        return number; 
    }
    return 0; // it's up to you to decide what to return in this case
}

如上所述,正如评论中所提到的,该方法的逻辑存在问题。 如果顾名思义,该方法应该打印2到n的所有幂,当i为0时,它不应该返回。返回语句应该只出现在循环之外。

public static int printPowersof2(int n) {
    int number = 0;
    for (int i = 0; i <= n; i++) {
        number = (int) Math.pow(2, i);
        System.out.println(number);            
    }
    return number;
}

我不确定返回值应该是多少。如果你想返回2的所有幂而不是只打印它们,你的方法应该返回一个List或一个数组。

public static int[] printPowersof2(int n) {
    if (n<0)
        return new int[0];
    int[] result = new int[n+1];
    for (int i = 0; i <= n; i++) {
        result[i] = (int) Math.pow(2, i);           
    }
    return result;
}

答案 1 :(得分:1)

如果要返回多个结果(在您的情况下,2的幂从0到n),您需要返回某种类型的集合,例如:清单:

public static List<Integer> printPowersof2(int n) {
    List<Integer> list = new ArrayList<>(n);
    for (int i = 0; i <= n; i++) {
        list.add((int) Math.pow(2, i));
    }
    return list;
}

或数组:

public static int[] printPowersof2(int n) {
    int[] result = new int[n];
    for (int i = 0; i <= n; i++) {
        result[i] = (int) Math.pow(2, i);
    }
    return result;
}

答案 2 :(得分:1)

您实际上并不想return任何事情。问题是“编写一个名为printPowersOf2的方法,它接受一个最大数字作为参数,并将每个2的幂从20(1)打印到最大功率,包括在内。”这没有说明返回任何值。

如果您希望能够在表达式中调用方法并使用其值,则可以使用

return和结果类型。例如:

double d = Math.sqrt(5);

d设置为5的平方根。为此,必须声明sqrt方法返回一个值(实际为double),并且必须是return方法体中某处的sqrt语句,它告诉它该值是什么。在上面的语句中,该值(获得return'的值将被分配到d

但是,在您的情况下,您不希望将任何内容设置为值。你永远不会想做像

这样的事情
int something = printPowersOf2(10);

因为printPowersOf2的目的是打印结果,而不是计算可以在表达式中使用的值。

因此,方法的结果类型应为void

public static void printPowersOf2(int n) {
    ...
}

并且正文不得包含任何包含值的return语句。 (没有值的return;语句都可以。)正文将打印值(可能使用System.out.println),但不会返回任何值。

答案 3 :(得分:0)

将回报置于循环之外。

public static int printPowersof2(int n) {
    int sum = 0;
    for (int i = 0; i <= n; i++) {
        int number = (int) Math.pow(2, i);
        sum = sum + number;
        System.out.println(number + " : " + sum); // will print current calculated result & sum of it
    }
   return sum; // I have returned sum, you can return whatever you want
}

答案 4 :(得分:0)

好的,谢谢你的帮助。如上所述,我对虚空和回归感到困惑。这是工作方法:

public static void printPowersOf2(int n) {
    for (int i = 0; i <= n; i++) {
        int number = (int) Math.pow(2, i);
        System.out.print(number);
        System.out.print(" ");
    }
}