Java提取数字各位功能异常,输出结果不符合预期
问题排查与修复
核心错误点
- 幂运算误用:Java中
^是按位异或运算符,不是幂运算。你写的10^(power)根本不是计算10的power次方,这直接导致数值计算完全错误。 - 循环条件错误:
while (n <= Size)会让循环多执行一次(比如数字长度为3时,n从0到3共4次迭代),超出实际位数。 - 取位逻辑混乱:原代码的
power计算和数值更新逻辑完全不符合从高位到低位取数的需求。
修复方案
方案1:利用字符串遍历(最直观)
既然已经把数字转成了字符串,直接遍历每个字符输出即可,逻辑简单不易出错:
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter a number"); int number = sc.nextInt(); String numStr = Integer.toString(number); // 遍历字符串的每个字符,转成数字输出 for (char c : numStr.toCharArray()) { System.out.println(c - '0'); // 字符转整数 } } }
方案2:纯数学方法(不转字符串)
如果想用数学方法从高位到低位输出每一位,逻辑是先计算最高位的权值,然后依次取位并缩小权值:
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter a number"); int number = sc.nextInt(); int temp = number; // 计算最高位的权值(比如134的权值是100) int divisor = 1; while (temp / 10 != 0) { divisor *= 10; temp /= 10; } // 依次取每一位 while (divisor > 0) { int digit = number / divisor; System.out.println(digit); number %= divisor; divisor /= 10; } } }
原代码错误验证
你提到的number = (number/(10^(power)));问题,比如当power=1时,10^1在Java中是按位异或,结果是11(二进制1010 ^ 0001 = 1011),所以除法计算完全偏离预期,这就是数值异常的根本原因。
内容的提问来源于stack exchange,提问作者Programmer
相关产品推荐
相关产品推荐

