Java使用while循环、String与double数组计算平均值程序无输出问题
Java平均值计算程序问题修复
原代码核心问题
- 输入读取逻辑错误:
StdIn.readAllStrings()、StdIn.readAllDoubles()会一次性读取全部输入,第一次执行后输入流就为空,后续没有任何数据可以读取 - 数据存储逻辑缺失:读取到的姓名、三个数值没有存入你定义的1个String数组、3个double数组中,后续无法输出
- 输出逻辑完全错误:第一个循环读完输入后,第二个循环的
!StdIn.isEmpty()判断永远不成立,不会进入输出分支,同时直接打印names数组只会输出数组内存地址,平均值计算逻辑也不符合需求(你写的是累计所有输入值的平均,需求是每组三个数单独计算平均)
修复后可运行代码
import edu.princeton.cs.algs4.StdIn; import edu.princeton.cs.algs4.StdOut; public class Average { public static void main(String[] args) { int n = Integer.parseInt(args[0]); String[] names = new String[n]; double[] a = new double[n]; double[] b = new double[n]; double[] c = new double[n]; int counter = 0; // 读取n行输入,存到对应数组 while (counter < n && !StdIn.isEmpty()) { // 每次读一行的四个值:1个姓名+3个数字 names[counter] = StdIn.readString(); a[counter] = StdIn.readDouble(); b[counter] = StdIn.readDouble(); c[counter] = StdIn.readDouble(); counter++; } // 遍历数组输出结果,计算每组平均值 int i = 0; while (i < n) { double average = (a[i] + b[i] + c[i]) / 3; StdOut.printf("%s %.0f %.0f %.0f %.2f%n", names[i], a[i], b[i], c[i], average); i++; } } }
使用说明
运行时执行命令java Average 4,依次输入4行内容后按下Ctrl+Z(Windows系统)/ Ctrl+D(Mac/Linux系统)即可看到输出,和你给出的预期效果完全一致。
内容的提问来源于stack exchange,提问作者gizmo.java
相关产品推荐
相关产品推荐

