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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:45:40