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

单词积分计算程序输出始终为0的问题排查求助

问题分析与修复方案

问题根源

  1. switch判断对象完全错误
    你当前用switch(point)做判断,但point初始值是0,而所有case都是字符(比如'a'对应ASCII码97),两者永远不可能匹配,所以所有case都不会触发,point始终保持0。

  2. 未遍历单词中的每个字符
    代码只读取了整行字符串,但没有循环处理每个字母,等于完全没计算单词的字母分数。

  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:35:46