Java如何无需反转数组将输入数字的各位按原顺序存入数组?
问题:将数字各位按原顺序存入数组(无需反转)
想要编写一个Java程序,输入一个数字(例如12345)后,将其各位数字按原有顺序存入数组。目前的实现需要依赖反转数组的方法,如果不反转,数组里的数字是逆序的。想知道有没有无需反转数组就能按原顺序存入的方法?另外考虑过转字符串用charAt,但担心存入的是ASCII值而非实际数字。
现有实现代码
int[] array = createArray(12345678); public static int[] createArray(int a) { int[] array = new int[countDigits(a)]; int i = 0; while (a != 0) { int b = a % 10; array[i] = b; a = a / 10; i++; } return reverseArray(array); } public static int[] reverseArray(int[] array) { int[] newArray = new int[array.length]; int j = array.length - 1; for(int i = 0; i < array.length; i++) { newArray[i] = array[j]; j--; } return newArray; }
两种无需反转的解决方案
方案1:直接从高位到低位填充数组
核心思路是先确定数字的位数,计算最高位的权值,然后依次提取每一位存入数组的对应位置,全程不需要反转:
public static int[] createArray(int a) { int digitCount = countDigits(a); int[] array = new int[digitCount]; // 计算最高位的除数,比如12345对应10000 int divisor = (int) Math.pow(10, digitCount - 1); for (int i = 0; i < digitCount; i++) { // 提取当前高位数字 array[i] = a / divisor; // 移除已提取的高位部分 a = a % divisor; // 除数缩小10倍,准备提取下一位 divisor /= 10; } return array; } // 数字位数统计方法(如果未实现可直接用) public static int countDigits(int a) { if (a == 0) return 1; int count = 0; while (a != 0) { count++; a /= 10; } return count; }
方案2:字符串转换法(正确处理ASCII值)
转字符串的方法完全可行,只需通过字符 - '0'的方式把ASCII值转换为实际数字——因为数字字符的ASCII值是连续的,'1'比'0'大1,'2'大2,以此类推:
public static int[] createArray(int a) { String numStr = String.valueOf(a); int[] array = new int[numStr.length()]; for (int i = 0; i < numStr.length(); i++) { // 转换为实际数字 array[i] = numStr.charAt(i) - '0'; } return array; }
这种方法代码更简洁,且完全不用担心ASCII值的问题。
内容的提问来源于stack exchange,提问作者Lenzz920
相关产品推荐
相关产品推荐

