这段Java数字位数统计代码是否存在错误?
你的整数位数统计Java代码存在这些问题
嘿,这段代码确实有几个关键问题,导致它没法正确统计整数的位数,咱们逐个说清楚:
count变量的作用域完全错了
你把int count=0;放在了while循环的内部,这意味着每次循环迭代的时候,都会重新创建一个count变量并把它重置为0。举个例子,输入123的话,循环会跑3次,但每次进去count都是从0开始加1,最后循环结束时count的值只会是1,根本没法累计出正确的3位。你得把count的定义移到循环外面,这样它才能在每次循环里持续累加。没处理n=0的特殊情况
如果用户输入的是0,n>0的条件不满足,循环根本不会执行。要是count在外面初始化为0,最后输出的就是0,但0本身是1位数字,这显然不符合预期。必须加个判断,当n是0的时候直接把count设为1。忽略了负数的情况
要是输入的是负数(比如-123),n>0的条件同样不成立,循环不执行,输出0,但实际上这个数的有效位数是3。如果需要支持负数的位数统计,得先把n转换成绝对值(用Math.abs(n)),再进行后续的循环处理。
修正后的代码示例
Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int count = 0; // 处理0的特殊场景 if (n == 0) { count = 1; } else { // 转换为绝对值,兼容负数的情况 n = Math.abs(n); while (n > 0) { n = n / 10; count++; } } System.out.println(count);
内容的提问来源于stack exchange,提问作者Varun Chawla
相关产品推荐
相关产品推荐

