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

Java程序问题:无法正确输出最长姓名与出生年份平均值

问题排查与修正

原代码核心问题

  • 未存储人员信息:没有保存每条输入的姓名和完整信息,既无法输出所有人员内容,也没法遍历所有姓名找最长项
  • 最长姓名逻辑完全错误:
    • 循环条件i < txt.length()误用,txt是最后一次输入的字符串,并非人员数量
    • pcs仅保留最后一次输入的分割结果,不是所有姓名的集合
    • 初始化low = pcs[0].length()时,若最后一次输入为空字符串,会触发数组越界
  • 输入处理顺序错误:先执行split再判断空字符串,空字符串分割后会得到长度为1的数组,后续操作易出错
  • 缺失人员信息输出:未打印所有输入的人员内容

修正后的代码

import java.util.ArrayList;
import java.util.Scanner;

public class PersonalDetails {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        
        int sum = 0;
        double avg = 0;
        ArrayList<String> names = new ArrayList<>();
        ArrayList<String> allDetails = new ArrayList<>();
        
        while (true) {
            String txt = in.nextLine();
            if (txt.equals("")) {
                break;
            }
            allDetails.add(txt);
            String[] pcs = txt.split(",");
            String name = pcs[0];
            names.add(name);
            sum += Integer.parseInt(pcs[1]);
        }
        
        int count = names.size();
        if (count > 0) {
            avg = (double) sum / count;
        }
        
        String longestName = "";
        for (String name : names) {
            if (name.length() > longestName.length()) {
                longestName = name;
            }
        }
        
        for (String detail : allDetails) {
            System.out.println(detail);
        }
        System.out.println();
        
        System.out.println("Longest name: " + longestName);
        System.out.println("Average of the birth years: " + avg);
    }
}

修正说明

  • 用ArrayList存储所有人员的完整信息和姓名,既满足输出需求,也能遍历筛选最长姓名
  • 调整输入处理顺序:先判断空字符串再分割,避免空输入引发的异常
  • 遍历所有姓名逐个比较长度,确保找到最长项
  • 补充所有人员信息的输出,完全匹配示例格式要求

内容的提问来源于stack exchange,提问作者Amin Mousavi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:05:22