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

