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的方法不起作用。没有解释的转储代码并不是一个好的答案。