You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求反复将数字除以2至结果为0的次数及Java代码问题排查

修正你的“反复除以2计数”代码

首先,咱们先梳理下你原代码里的几个核心问题:

  • 循环条件完全搞反了:你写的while (k == 0),意思是只有当k等于0时才会进入循环,但初始k是i/2(比如输入40的话k是20),所以循环根本不会执行。
  • 变量职责混乱:你试图用k同时存储除法结果和计数,这直接导致逻辑错乱。
  • 计数逻辑缺失:没有专门的变量来统计除法操作的次数,也没实现“反复除以2直到0”的核心逻辑。

接下来是修正后的代码,我会逐行解释关键改动:

import java.util.Scanner;

public class DivideByTwoCounter {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter A Number:");
        
        try {
            int num = sc.nextInt();
            int count = 0;
            int current = num;
            
            // 循环逻辑:只要当前数还没变成0,就继续执行除法
            while (current != 0) {
                current = current / 2; // 执行除以2的操作
                count++; // 每完成一次除法,计数加1
                // 可选:打印每次的计算结果,和你例子里的过程一致
                // System.out.println(current);
            }
            
            System.out.println("总共进行了 " + count + " 次除法");
        } catch (Exception e) {
            // 新增异常处理,防止输入非数字的情况
            System.out.println("请输入有效的整数!");
        } finally {
            sc.close(); // 别忘了关闭Scanner资源,避免内存泄漏
            System.out.println("done");
        }
    }
}

关键修正点说明:

  1. 拆分变量职责:用current存储当前要计算的数,count专门负责统计次数,避免变量复用导致的逻辑混乱。
  2. 修正循环条件:while (current != 0)确保只要当前数还没到0,就继续执行除法操作。
  3. 正确的计数逻辑:每次完成current = current / 2后,将count加1,完全对应你例子里的每一步除法操作。
  4. 健壮性优化:新增了输入异常捕获,以及关闭Scanner资源的操作,让代码更严谨。

测试输入40的场景:

  • current初始=40 → 除以2得20,count=1
  • current=20 → 10,count=2
  • current=10 →5,count=3
  • current=5→2,count=4
  • current=2→1,count=5
  • current=1→0,count=6
  • 此时current为0,循环结束,输出结果6,完全符合你的预期。

内容的提问来源于stack exchange,提问作者ahto design

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:20:34