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

求助:如何编写Sentinel控制的while循环计算月平均低温

解决哨兵控制循环计算平均低温的问题

我来帮你搞定这个哨兵循环的写法,顺便修正你代码里的问题~首先咱们先理清楚核心要点:

一、哨兵值的选择原因

哨兵值必须是一个绝对不会出现在有效输入范围内的数值,这样才能明确告诉程序“我输入完所有温度了,可以停止循环了”。

对于气温来说,地球上自然环境下的低温很少会低于-100华氏度(约-73摄氏度),所以咱们可以选**-999**作为哨兵值——这个温度在现实中几乎不可能出现,完全不会和真实的低温数据混淆,是很合适的选择。

二、修正后的完整代码

你的原代码缺少循环条件、累加计数逻辑,还错误地在循环里直接覆盖了输入的温度值,咱们来调整一下:

import java.util.Scanner;

public class AverageLowTemp {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 定义哨兵值,用于结束输入
        final int SENTINEL = -999;
        // 初始化总和(用double保证精度)、计数
        double totalTemp = 0.0;
        int count = 0;

        // 提示用户输入,说明哨兵值的作用
        System.out.println("请输入每日的低温(华氏度),输入" + SENTINEL + "结束输入:");
        int temp = scan.nextInt();

        // 哨兵控制的while循环:只要输入不是哨兵值,就继续处理
        while (temp != SENTINEL) {
            // 把华氏度转换为摄氏度
            double celsiusTemp = 5.0 / 9.0 * (temp - 32.0);
            // 累加转换后的温度,计数加1
            totalTemp += celsiusTemp;
            count++;
            // 读取下一个温度,准备下一次循环判断
            temp = scan.nextInt();
        }

        // 计算并输出平均温度(要避免除以0的情况)
        if (count > 0) {
            double averageTemp = totalTemp / count;
            System.out.printf("该月份的平均低温为:%.2f 摄氏度%n", averageTemp);
        } else {
            System.out.println("你没有输入任何温度数据!");
        }

        scan.close();
    }
}

三、代码关键点解释

  • 用final int SENTINEL = -999定义哨兵值,方便后续维护和修改;
  • 用double类型存储总和和平均值,保证计算精度(如果用int会丢失小数部分);
  • 循环前先读取第一个温度,这是哨兵循环的标准写法——先获取初始值,再判断是否进入循环;
  • 循环内部先处理当前输入的温度,再读取下一个值,避免遗漏或重复处理;
  • 最后加了count > 0的判断,防止用户直接输入哨兵值导致除以0的错误。

这样写就能完美实现需求啦,你可以运行测试一下,输入几个温度后输入-999,就能看到正确的平均结果了~

内容的提问来源于stack exchange,提问作者Audrey Washington-Wright

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:57:42