有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java“缺少返回语句”将无法编译

下面的方法应该返回从0到n的2的幂。但是,我得到一个错误,说我的代码没有编译,因为缺少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) 个答案

  1. # 1 楼答案

    你实际上不想做任何事情。问题是“编写一个名为printPowersOf2的方法,该方法接受一个最大值作为参数,并打印从20(1)到该最大值(包括)的每一个2次幂。”这与返回任何值无关

    return和结果类型,如果希望能够调用表达式中的方法并使用其值,则可以使用它们。例如:

    double d = Math.sqrt(5);
    

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

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

    int something = printPowersOf2(10);
    

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

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

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

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

  2. # 2 楼答案

    必须在循环之外有一个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时,它不应该返回。return语句应该只出现在循环之外

    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的所有幂,而不是只打印它们,那么您的方法应该返回一个列表或数组

    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;
    }
    
  3. # 3 楼答案

    将回路置于回路外

    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. # 4 楼答案

    好的,谢谢你的帮助。如上所述,我对无效和返回感到困惑。工作方法如下:

    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(" ");
        }
    }
    
  5. # 5 楼答案

    如果要返回多个结果(在本例中,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;
    }