Java &引用;缺少返回语句";-不会编译

Java &引用;缺少返回语句";-不会编译,java,methods,compiler-warnings,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); retur

以下方法应将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; 
    }
}
公共静态int-printpowso2(int-n){

对于(inti=0;i您必须在循环外有一个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
}
公共静态int-printpowso2(int-n){

对于(inti=0;i您必须在循环外有一个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
}
公共静态int-printpowso2(int-n){

对于(int i=0;i如果要返回多个结果(在您的情况下,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;
}
公共静态列表printpowso2(int n){
列表=新的ArrayList(n);

对于(int i=0;i如果要返回多个结果(在您的情况下,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;
}
公共静态列表printpowso2(int n){
列表=新的ArrayList(n);

对于(int i=0;i将返回置于循环之外

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;
}
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
}
公共静态int-printpowso2(int-n){
整数和=0;

对于(int i=0;i将返回置于循环之外

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;
}
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
}
公共静态int-printpowso2(int-n){
整数和=0;

对于(int i=0;i您实际上不想
返回任何东西。问题是“编写一个名为printPowersOf2的方法,该方法接受一个最大数作为参数,并打印从20(1)到该最大幂的每一个2的幂。”这与返回任何值无关

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

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

然而,在你的情况下,你不想把任何东西设置为一个值,你永远不会想做像这样的事情

int something = printPowersOf2(10);
因为
printPowersOf2
的目的是打印结果,而不是计算可在表达式中使用的值

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

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

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

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

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

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

然而,在你的情况下,你不想把任何东西设置为一个值,你永远不会想做像这样的事情

int something = printPowersOf2(10);
因为
printPowersOf2
的目的是打印结果,而不是计算可在表达式中使用的值

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

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

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

好的,谢谢您的帮助。如上所述,我被void和return弄糊涂了。下面是工作方法:

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(" ");
    }
}
publicstaticvoidprintpowso2(intn){

对于(int i=0;i好的,谢谢你的帮助。如上所述,我被void和return弄糊涂了。以下是工作方法:

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(" ");
    }
}
publicstaticvoidprintpowso2(intn){

为了(int i=0;i)这解释了错误消息——但这段代码的问题比这严重得多。@ajb是的,你是对的。我关注编译错误,但没有真正检查逻辑。@Eran不用担心,我几乎做了同样的事情。这解释了错误消息——但这段代码的问题比那严重得多。@ajb是的,哟你说得对。我只关注编译错误,没有真正检查逻辑。@Eran不用担心,我几乎做了同样的事情。循环的原因是什么?你是第一次从方法返回的。在循环之外放置一个
return
语句,因为循环可能不会以负数执行。你明白
retu是什么吗rn
的意思是?您说该方法应该“返回”2的几次幂,但该方法的名称表明它应该“打印”它们。此外,您已将结果类型声明为
int
,这意味着它只能返回一个整数。我怀疑您需要