Java新手求助:仅在main方法实现ArrayList天气记录程序
只在main方法里实现天气记录程序的完整方案
没问题!完全可以只在public static void main(String[] args)里搞定这个天气记录程序,我给你写个完整的可运行示例,顺便帮你捋捋你遇到的ArrayIndexOutOfBoundsException: -1是咋回事——这个错误一般是你不小心尝试访问ArrayList索引为-1的位置(比如还没存任何数据就想取元素,或者退出逻辑里写错了索引)。
先看完整代码,每一步都加了注释,你跟着看就能懂:
import java.util.ArrayList; import java.util.Scanner; public class WeatherRecord { public static void main(String[] args) { // 创建ArrayList存储气温数据,用Double类型支持小数温度 ArrayList<Double> temperatures = new ArrayList<>(); Scanner scanner = new Scanner(System.in); // 定义退出指令,比如输入-999就停止输入 final int EXIT_CODE = -999; System.out.println("欢迎使用天气记录程序!"); System.out.println("请输入每日气温(输入" + EXIT_CODE + "结束输入):"); // 循环接收用户输入 while (true) { System.out.print("请输入气温:"); String input = scanner.nextLine().trim(); // 先处理退出逻辑 if (input.equals(String.valueOf(EXIT_CODE))) { System.out.println("输入结束,开始统计数据..."); break; } // 尝试将输入转为数字,处理非数字输入的情况 try { double temp = Double.parseDouble(input); temperatures.add(temp); System.out.println("已记录气温:" + temp + "℃"); } catch (NumberFormatException e) { System.out.println("输入无效,请输入数字或者" + EXIT_CODE + "退出!"); } } // 统计并展示结果,先判断有没有数据 if (temperatures.isEmpty()) { System.out.println("没有记录任何气温数据,无法统计!"); } else { // 计算最高气温 double maxTemp = temperatures.get(0); for (double temp : temperatures) { if (temp > maxTemp) { maxTemp = temp; } } // 计算平均气温 double sum = 0; for (double temp : temperatures) { sum += temp; } double avgTemp = sum / temperatures.size(); // 输出结果,保留两位小数更美观 System.out.println("===== 天气统计结果 ====="); System.out.println("记录的天数:" + temperatures.size() + "天"); System.out.printf("最高气温:%.2f℃\n", maxTemp); System.out.printf("平均气温:%.2f℃\n", avgTemp); } scanner.close(); } }
关键细节说明(帮你避坑):
- 避免越界异常:咱们在统计前先判断
temperatures.isEmpty(),确保有数据再去访问索引(比如temperatures.get(0)),这样就不会出现访问-1索引的情况了。 - 输入容错处理:加了
try-catch捕获非数字输入的异常,不会因为用户输错就崩溃。 - 退出逻辑清晰:先判断输入是不是退出码,再处理数字转换,逻辑顺序不容易出错。
- 动态存储:用ArrayList不用提前确定天数,用户想输多少天就输多少,非常灵活。
运行示例:
欢迎使用天气记录程序! 请输入每日气温(输入-999结束输入): 请输入气温:23.5 已记录气温:23.5℃ 请输入气温:25.1 已记录气温:25.1℃ 请输入气温:21.8 已记录气温:21.8℃ 请输入气温:-999 输入结束,开始统计数据... ===== 天气统计结果 ===== 记录的天数:3天 最高气温:25.10℃ 平均气温:23.47℃
你可以把这段代码复制过去直接运行,有不懂的地方随时琢磨代码里的注释,或者再细化你的需求~
内容的提问来源于stack exchange,提问作者junior
相关产品推荐
相关产品推荐

