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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:35:31