字符串中数字求和问题:代码可运行但输出结果错误
代码错误分析与修正
存在的问题
- Scanner初始化错误:
new Scanner("System.in")会将字符串"System.in"作为输入源,而非读取控制台输入,正确写法是new Scanner(System.in)。 - 字符转数字逻辑错误:
s.charAt(i)返回的是字符的ASCII码值(比如字符'1'的ASCII是49),直接对该值取模判断奇偶、累加ASCII值转成的整数,完全偏离了实际数字的计算逻辑。 - 缺少数字校验:若输入字符串包含非数字字符,代码会抛出转换异常,需先判断字符是否为数字。
修正后的代码
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); int sumeven = 0; int sumodd = 0; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); // 先判断当前字符是否为数字 if (Character.isDigit(c)) { int num = Character.getNumericValue(c); if (num % 2 == 0) { sumeven += num; } else { sumodd += num; } } } System.out.println(sumeven + " " + sumodd); } }
修正说明
- 修正Scanner初始化方式,现在可以正确读取控制台输入内容。
- 新增数字字符校验,避免非数字字符引发的转换异常。
- 使用
Character.getNumericValue(c)将字符转换为对应整数(如'5'转为5),再进行奇偶判断与累加,逻辑符合需求。
内容的提问来源于stack exchange,提问作者Lakshya Gupta
相关产品推荐
相关产品推荐

