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

计算平均值的Java程序出现NaN错误,求原因及解决办法

Java程序计算平均值出现NaN的原因及修复

核心问题

你的代码出现NaN的直接原因是循环完全没执行,最终触发了0/0的计算——在Java中,0除以0的结果就是NaN(非数字)。

具体分析

  1. while循环条件写反了:while(temps.length < k)。初始时k=0,temps.length=2,2 < 0明显不成立,循环体一行代码都不会运行。
  2. 循环没执行的情况下,total保持初始值0,k也还是0。
  3. 执行avgTemp = total / k时,本质是0/0,直接产生NaN。

另外,就算循环条件写对了,原代码里的数组操作逻辑也有问题:你一直累加temps[0],然后把temps[1]的值赋给temps[0],这会导致重复累加同一个值,而不是遍历所有元素。

修复方案

方案一:修正while循环的条件与逻辑

import java.util.*;
import java.io.*;
public class Experiment {
public static void main(String args[]){
   double temps[] = {27.5,34.4};
   int k = 0;
   double total = 0;
   double avgTemp;
   // 修正循环条件:当k小于数组长度时执行循环
   while(k < temps.length)
   {
      total += temps[k]; // 遍历数组的第k个元素
      System.out.println("Temp: " + temps[k]);
      k++; // 移动到下一个元素
    }
   // 增加判断,避免数组为空时再次出现除以0的问题
   if(k != 0) {
       avgTemp = total / k;
       System.out.println("Average: " + avgTemp);
   } else {
       System.out.println("数组为空,无法计算平均值");
   }
   }
}

方案二:用增强for循环(更简洁)

增强for循环可以直接遍历数组中的每个元素,避免下标操作出错:

import java.util.*;
import java.io.*;
public class Experiment {
public static void main(String args[]){
   double temps[] = {27.5,34.4};
   double total = 0;
   double avgTemp;

   // 直接遍历数组中的每个温度值
   for(double temp : temps) {
       total += temp;
       System.out.println("Temp: " + temp);
   }

   // 先判断数组是否为空,再计算平均值
   if(temps.length > 0) {
       avgTemp = total / temps.length;
       System.out.println("Average: " + avgTemp);
   } else {
       System.out.println("数组为空,无法计算平均值");
   }
   }
}

内容的提问来源于stack exchange,提问作者Peanut Walrus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:55:15