【问题标题】:While loop in Java :: keep dividing while contion is not metJava中的while循环::不断划分while条件不满足
【发布时间】:2020-04-29 08:02:19
【问题描述】:

我有一个基本代码:

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

有没有办法不使用 for 循环

【问题讨论】:

  • 你返回第一个除法后的数字;循环结束后返回。
  • 你的循环中有一个 return 语句。所以它将在第一次迭代时返回。只需将其删除并在循环完成后返回。顺便说一句:如果您使用 for 循环并在 for 循环内返回,也会发生同样的事情。这不是特定于 while 循环的
  • 返回号码; -> 有你的问题,这结束了方法,所以循环也是如此
  • public static int experiment (int number) { while (number > 10) { number = number / 2; } return number; }
  • 哦,我相信它可能会起作用。您可以发布答案,请

标签: java loops for-loop while-loop


【解决方案1】:

return 移出循环:

public static int experiment (int number) {
    while (number > 10) {
        number = number / 2;
    }
    return number;
}

如果你需要 -1 来处理特殊情况,你应该在进入循环之前检查它:

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

顺便说一句,开始使用调试器,你可以单步调试这种代码并轻松找到问题。

【讨论】:

    【解决方案2】:

    错在你将return number 放入while 循环中,它将结束迭代并返回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);
        } 
    }
    

    【讨论】:

      【解决方案3】:

      使用递归:

      
      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;
      

      【讨论】:

      • 为什么要使用递归?如果您说这是一种更好的方法,您需要解释原因。你需要解释为什么 OP 的方法不起作用。不解释就转储代码不是一个好的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 2020-02-06
      相关资源
      最近更新 更多