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

Java统计指定范围校验和匹配数字的代码运行结果异常求助

问题原因
  • 字符编码计算错误:你通过charAt()获取到的是字符类型的数字,Java中直接对char类型做算术运算时,使用的是字符对应的ASCII编码值,数字字符'0'`'9'`的ASCII码为4857,这就是你输出结果落在49-57区间的根本原因。要获取字符对应的整数值,需要用oneDigit - '0'做转换。
  • 校验和累加逻辑错误:你在内层for循环中每次迭代都执行checksum = 0;,会清空之前已经累加的位数值,最终只会保留最后一位的字符编码值,完全无法实现多位数的校验和求和,这行重置代码应该移到内层循环外面。
修复后代码
public class MathCalculation {
    
    public static void häufigkeitDasQuersummeTeilbarDurch (int startvalue, int endvalue, int numberWichChecksumShouldEqual) {
        int counter = 0;
        
        for(int i = startvalue;i<=endvalue;i++) {
            // 提前存数字转字符串的结果,避免重复转换提升性能
            String numStr = String.valueOf(i);
            int digitLength = numStr.length();
            int checksum = 0;
            
            for( int j = 0; j < digitLength; j++ ) {
                char oneDigit = numStr.charAt(j);
                // 字符转对应整数后再累加
                checksum += (oneDigit - '0');
            }
            if(checksum == numberWichChecksumShouldEqual) {
                counter += 1;
            }
        }
        System.out.println(counter);
    }

    // 测试入口
    public static void main(String[] args) {
        häufigkeitDasQuersummeTeilbarDurch(102,999, 3);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:15:09