Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java::中的While循环在不满足contion时保持分割_Java_Loops_For Loop_While Loop - Fatal编程技术网

Java::中的While循环在不满足contion时保持分割

Java::中的While循环在不满足contion时保持分割,java,loops,for-loop,while-loop,Java,Loops,For Loop,While Loop,我有一个基本代码: public class experiment { public static void main(String[] args) { System.out.println(experiment(80)); } public static int experiment (int number) { while (number > 10) { number = number / 2;

我有一个基本代码:

public class experiment {

    public static void main(String[] args) {
        System.out.println(experiment(80));
    }

    public static int experiment (int number) {
        while (number > 10) {
            number = number / 2;
            return number;
        } return -1;
    }
}
它返回我
40

这意味着没有在变量
number
上循环

我希望它继续在
number
(80、40、20、10)上循环,直到它返回
10

有没有一种方法可以在不使用循环的情况下执行此操作

使用递归:


public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(test.toTen(80));

    }
    public static int toTen(int k) {
        if (k==10) {
            return k;
        }
        else {
            return toTen(k/2);
        }

    }

}
或者像这样简单地编辑循环

        while (k > 10) {
            k = k / 2;
        } 

        return k;

返回
移出循环:

public static int experiment (int number) {
    while (number > 10) {
        number = number / 2;
    }
    return number;
}
public static int experiment (int number) {
    if (number < 0) { // or some condition
        return -1;
    }
    while (number > 10) {
        number = number / 2;
    }
    return number;
}
如果在特殊情况下需要-1,则应在进入循环之前进行检查:

public static int experiment (int number) {
    while (number > 10) {
        number = number / 2;
    }
    return number;
}
public static int experiment (int number) {
    if (number < 0) { // or some condition
        return -1;
    }
    while (number > 10) {
        number = number / 2;
    }
    return number;
}

公共静态整数实验(整数){
如果(数<0){//或某个条件
返回-1;
}
而(数量>10){
数量=数量/2;
}
返回号码;
}

顺便说一句,开始使用调试器,您可以单步执行此类代码并轻松找到问题。

错误在于,您将
返回编号
放在
中,而
循环将结束迭代并返回
40
的值。所以你必须

public static int experiment (int number) {
    while (number > 10) {
        number = number / 2;
    } 
    return number;
}
如果要打印循环传递的所有数字

public static void experiment (int number) {
    while (number > 10) {
        number = number / 2;
        System.out.println(number);
    } 
}

返回第一个除法之后的数字;循环完成后返回它。循环中有一个return语句。因此,它将在第一次迭代时返回。只需移除它,并在循环完成后返回即可。顺便说一句:如果使用for循环并在for循环内返回,也会发生同样的情况。这不是特定于while loopreturn编号;->这是您的问题,方法到此结束,因此循环也是
公共静态int实验(int number){while(number>10){number=number/2;}返回number;}
哦,我相信它可能会工作。你可以发布答案,为什么要使用递归?如果你说这是一个更好的方法,你需要解释为什么。你需要解释为什么OP的方法不起作用。没有解释的转储代码并不是一个好的答案。