使用对象数组计算平均值的实现困惑求助
解决对象数组计算身高平均值的问题
嘿,我懂你现在的困惑——你对对象数组的理解有点走偏了,咱们把逻辑掰正过来!
你的代码核心问题在于:把统计用的total和count做成了Height类的实例变量。这意味着每创建一个Height对象,都会生成独立的total和count,根本没法累加所有用户输入的身高数据。比如第一个对象的total是输入的第一个数、count=1;第二个对象的total是第二个数、count=1,最后调用print时只会用最后一个对象的数值计算,完全达不到你要的效果。
思路修正:拆分职责
正确的做法是让每个类只干一件事:
Height类:只负责存储单个用户的身高数据- 主类
ObjectArray:负责接收输入、创建对象数组、计算平均值并打印
修正后的完整代码
1. 只存数据的Height类
class Height { // 仅存储单个身高值 private int height; // 构造方法初始化身高 public Height(int height) { this.height = height; } // 提供获取身高的公共方法(因为height是私有变量) public int getHeight() { return height; } }
2. 主类:管理对象数组并计算平均值
import java.util.Scanner; public class ObjectArray { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 创建长度为5的Height对象数组 Height[] heights = new Height[5]; // 循环接收5次用户输入,创建对象并存入数组 for (int i = 0; i < heights.length; i++) { System.out.print("请输入第" + (i + 1) + "个身高:"); int inputHeight = scanner.nextInt(); heights[i] = new Height(inputHeight); } // 计算所有身高的总和 int totalHeight = 0; for (Height h : heights) { totalHeight += h.getHeight(); } // 计算平均值(转成double避免整数除法丢失精度) double average = (double) totalHeight / heights.length; // 打印结果 System.out.println("The average is: " + average); scanner.close(); } }
可选方案:用静态变量实现类级统计(不推荐但适合理解)
如果你非要在Height类里做统计逻辑,可以把total和count设为静态变量(属于类本身,所有对象共享)。不过这种方式违反了单一职责原则,实际项目里不推荐,但适合初学者理解静态变量的用法:
class Height { // 静态变量:所有Height对象共享 private static int total = 0; private static int count = 0; private int height; public Height(int height) { this.height = height; total += height; count++; } // 静态方法:打印平均值 public static void printAverage() { double average = (double) total / count; System.out.println("The average is: " + average); } } // 主类简化如下 import java.util.Scanner; public class ObjectArray { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Height[] heights = new Height[5]; for (int i = 0; i < heights.length; i++) { System.out.print("请输入第" + (i + 1) + "个身高:"); int input = scanner.nextInt(); heights[i] = new Height(input); } // 调用静态方法打印平均值 Height.printAverage(); scanner.close(); } }
这样运行后就能正确计算所有输入身高的平均值啦!
内容的提问来源于stack exchange,提问作者Java_Beginner
相关产品推荐
相关产品推荐

