Java代码开发问题:记录奶牛产奶量并筛选极值时出现错误
奶牛周产奶量统计代码问题解决
你正在开发一段Java代码,用来记录每头奶牛每天2次、连续7天挤奶时的身份信息及产奶量,需要实现两个核心功能:
- 找出一周内产奶量最高的奶牛
- 筛选出所有周产奶量低于12升的奶牛
但目前你编写的简化代码运行出现错误,现有代码如下:
import java.util.Scanner; public class test { public static void main(String[] args) { Scanner na = new Scanner(System.in); System.out.println("Please enter..."); } }
问题分析
从你给出的代码可以看到,目前只完成了最基础的Scanner初始化和提示输入的语句,核心的数据存储、产奶量录入、统计逻辑完全缺失,这不仅无法实现你想要的功能,甚至可能因为代码逻辑不完整导致运行异常。
完整解决方案代码
我帮你编写了完整的实现代码,通过封装实体类+集合管理的方式,清晰实现所有需求:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; // 封装奶牛身份和产奶量的实体类 class Cow { private String cowId; // 奶牛唯一标识 private double weeklyTotalMilk; // 一周总产奶量 public Cow(String cowId, double weeklyTotalMilk) { this.cowId = cowId; this.weeklyTotalMilk = weeklyTotalMilk; } public String getCowId() { return cowId; } public double getWeeklyTotalMilk() { return weeklyTotalMilk; } } public class CowMilkStats { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); List<Cow> cowRecords = new ArrayList<>(); // 先输入奶牛总数 System.out.print("请输入需要统计的奶牛数量:"); int totalCows = scanner.nextInt(); scanner.nextLine(); // 处理输入后的换行符,避免后续读取异常 // 逐头录入奶牛的一周产奶数据 for (int i = 0; i < totalCows; i++) { System.out.println("\n=== 录入第" + (i + 1) + "头奶牛数据 ==="); System.out.print("奶牛ID:"); String id = scanner.nextLine(); double totalMilk = 0.0; // 录入7天每天2次的产奶量 for (int day = 1; day <= 7; day++) { System.out.println("--- 第" + day + "天数据 ---"); for (int milkTime = 1; milkTime <= 2; milkTime++) { System.out.print("第" + milkTime + "次产奶量(升):"); double milk = scanner.nextDouble(); totalMilk += milk; } } scanner.nextLine(); // 清除换行符 // 将当前奶牛数据加入集合 cowRecords.add(new Cow(id, totalMilk)); } // 找出周产奶量最高的奶牛 Cow topMilkCow = cowRecords.get(0); for (Cow cow : cowRecords) { if (cow.getWeeklyTotalMilk() > topMilkCow.getWeeklyTotalMilk()) { topMilkCow = cow; } } System.out.println("\n✅ 一周产奶量最高的奶牛:"); System.out.println("奶牛ID:" + topMilkCow.getCowId() + ",周总产奶量:" + topMilkCow.getWeeklyTotalMilk() + "升"); // 筛选周产奶量低于12升的奶牛 System.out.println("\n⚠️ 周产奶量低于12升的奶牛:"); boolean hasLowMilkCow = false; for (Cow cow : cowRecords) { if (cow.getWeeklyTotalMilk() < 12) { hasLowMilkCow = true; System.out.println("奶牛ID:" + cow.getCowId() + ",周总产奶量:" + cow.getWeeklyTotalMilk() + "升"); } } if (!hasLowMilkCow) { System.out.println("没有符合条件的奶牛"); } scanner.close(); } }
代码说明
- 实体类封装:用
Cow类把奶牛的ID和周产奶量绑定,让代码结构更清晰,便于维护 - 集合管理:使用
ArrayList存储所有奶牛的数据,方便后续遍历统计 - 数据录入:通过嵌套循环实现7天每天2次的产奶量录入,自动累加得到周总产奶量
- 统计逻辑:遍历集合分别找出最高产奶量的奶牛,以及筛选出低产奶量的奶牛
内容的提问来源于stack exchange,提问作者user9372305
相关产品推荐
相关产品推荐

