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

Luhn算法实现时数组整数拆分相加结果异常问题求助

问题根因

你遇到的异常本质是char类型变量直接参与数值运算时使用的是ASCII编码值,而非字符对应的数字本身。ASCII编码规则中,字符'0'的对应数值是48,'1'为49,一直到'9'对应57。你直接拿temp2.charAt(0)赋值或相加时,实际计算的是字符的ASCII值:

  • 比如字符'4'的ASCII值是52,直接赋值就会出现预期得到4、实际得到52的问题
  • 比如字符'1'和'2'的ASCII值相加是49+50=99,就会出现无意义的大数结果

修复方案

你只需要在取到字符后减去'0',就能转换得到字符对应的数字值,修改后的对应代码片段如下:

if (temp2.length() == 1) { 
    System.out.println("Temp2 char 0: "+ temp2.charAt(0));
    // 减去'0'将字符转为对应数字
    tempSum = temp2.charAt(0) - '0';  
    System.out.println("This is tempSum == 1: " + tempSum);
} else {
    System.out.println("TEMP2 char 0 and char 1: " + temp2.charAt(0) + " " + temp2.charAt(1));
    // 两个字符分别转数字后再相加
    tempSum = (temp2.charAt(0) - '0') + (temp2.charAt(1) - '0');
    System.out.println("This is tempSum != 1: " + tempSum);
}

可选优化

你也可以不用转字符串处理数位相加,Luhn算法里双倍后大于等于10的数值,数位相加的结果等价于原数值减9:比如12的数位和是1+2=3,12-9=3;18的数位和是1+8=9,18-9=9,处理逻辑可以简化为:

int temp = cardNumber[i] * 2;
tempSum = temp >= 10 ? temp -9 : temp;

不用做字符串转换,运行效率更高,也不会出现字符编码相关的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:15:04