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
相关产品推荐
相关产品推荐

