You need to enable JavaScript to run this app. Java将整数各位存入ArrayList:转字符串法下字符转整数环节遇阻
优惠活动
大模型
产品
解决方案
定价
更多

Java将整数各位存入ArrayList:转字符串法下字符转整数环节遇阻

代码问题排查与修正

现有代码存在的问题

  • 集合初始化未关联成员变量:代码中单独写了new ArrayList<Integer>()语句,但没有将实例赋值给类成员digitList,此时digitList仍为null,执行add操作会触发空指针异常
  • 类型转换逻辑错误:直接将StringN.charAt(i)的返回值传入add方法时,char类型会自动转为对应的ASCII码值存储(例如字符'2'会被存为整数50,而非目标值2),不符合存储各位数字的需求
  • 冗余变量:手动维护的index变量没有存在必要,ArrayList的add方法默认按追加顺序在末尾插入元素,直接调用即可
  • 边界兼容缺失:如果传入的整数为负数,转字符串后首位为'-'字符,按当前逻辑会将'-'对应的ASCII值存入集合,需要做兼容处理

核心转换实现

ASCII编码中数字字符'0'~'9'的编码值是连续递增的,两种常用的字符转数字方式都可以实现需求:

  • 基础方式:用当前字符的编码值减去'0'的编码值,即可得到对应整数。例如'8' - '0'的运算结果就是整数8
  • 工具类方式:直接调用JDK提供的Character.getNumericValue(char)方法,可直接返回字符对应的数字值,兼容场景更多

修正后可运行的完整代码

import java.util.ArrayList;

class Digits{
    ArrayList<Integer> digitList;

    Digits(int num) {
        // 初始化集合并赋值给成员变量
        digitList = new ArrayList<Integer>();
        // 对入参取绝对值,避免负号字符干扰,可根据实际需求调整
        String numStr = Integer.toString(Math.abs(num));
        for(int i = 0; i < numStr.length(); i++) {
            // 转换字符为对应数字
            int digitValue = numStr.charAt(i) - '0';
            digitList.add(digitValue);
        }
    }
}

public class digitListclass {
    public static void main(String[] args) {
        // 功能测试
        Digits digitGroup = new Digits(9876);
        System.out.println(digitGroup.digitList); // 运行后输出 [9, 8, 7, 6]
    }
}

注意:如果业务上需要保留负数的符号(比如额外存储负号标记),可以去掉取绝对值的逻辑,在遍历到'-'字符时做特殊处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 22:36:05