单词积分计算程序输出始终为0的问题排查求助
问题分析与修复方案
问题根源
switch判断对象完全错误
你当前用switch(point)做判断,但point初始值是0,而所有case都是字符(比如'a'对应ASCII码97),两者永远不可能匹配,所以所有case都不会触发,point始终保持0。未遍历单词中的每个字符
代码只读取了整行字符串,但没有循环处理每个字母,等于完全没计算单词的字母分数。switch缺少break语句
即使能匹配到case,也会因为没有break继续执行后续所有case的累加操作,导致分数计算完全错误。
修正后的代码
File file = new File(fileName); Scanner sc = new Scanner(file); while (sc.hasNextLine()) { String line = sc.nextLine().toLowerCase(); // 转小写,兼容大写字母输入 int point = 0; // 遍历单词中的每个字符 for (char c : line.toCharArray()) { switch (c) { case 'a': case 'e': case 'i': case 'l': case 'n': case 'o': case 'r': case 's': case 't': case 'u': point += 1; break; case 'd': case 'g': point += 2; break; case 'b': case 'c': case 'm': case 'p': point += 3; break; case 'f': case 'h': case 'v': case 'w': case 'y': point += 4; break; case 'k': point += 5; break; case 'j': case 'x': point += 8; break; case 'q': case 'z': point += 10; break; default: // 处理非字母字符(如空格、符号) break; } } System.out.println(line + " - Is worth " + point + " Points"); } sc.close(); // 释放Scanner资源
关键修改说明
- 新增
for (char c : line.toCharArray())循环,逐个处理单词中的每个字符 - 将switch的判断对象改为当前字符
c,而非初始为0的point - 给每个分值组添加
break,避免case贯穿执行 - 用
toLowerCase()统一处理大小写字母,兼容不同输入格式 - 新增
default分支处理非字母字符,避免遗漏情况 - 添加
sc.close()释放IO资源
内容的提问来源于stack exchange,提问作者IconicTelomere
相关产品推荐
相关产品推荐

