计算平均值的Java程序出现NaN错误,求原因及解决办法
Java程序计算平均值出现NaN的原因及修复
核心问题
你的代码出现NaN的直接原因是循环完全没执行,最终触发了0/0的计算——在Java中,0除以0的结果就是NaN(非数字)。
具体分析
while循环条件写反了:while(temps.length < k)。初始时k=0,temps.length=2,2 < 0明显不成立,循环体一行代码都不会运行。- 循环没执行的情况下,
total保持初始值0,k也还是0。 - 执行
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
相关产品推荐
相关产品推荐

