Java未知大小数组定义及测验成绩计算格式报错解决咨询
异常原因分析
你遇到的java.util.IllegalFormatConversionException: f != java.lang.Integer异常是格式化输出类型不匹配导致的:变量num是int整型,你使用了仅支持浮点类型的格式符%1.2f输出,触发了类型转换校验失败。
代码核心问题梳理
- 数组初始化逻辑错误:你初始定义
n=0,创建的scores数组长度固定为0,后续遍历数组的for循环条件i<scores.length永远不成立,输入的成绩不会被读取,sum始终为0,计算逻辑完全不执行。 - Java普通数组是定长结构,初始化时必须指定固定长度,无法动态扩容,不适合存储未知数量的输入数据。
未知长度数据存储解决方案
使用Java集合框架中的ArrayList动态数组,它支持自动扩容,无需提前指定容量,适合存储未知数量的元素。
修正后完整代码
import java.util.ArrayList; import java.util.Scanner; public class Ex4_2 { public static void main(String args[]) { Scanner input = new Scanner(System.in); ArrayList<Integer> scoresList = new ArrayList<>(); double sum = 0; // 读取所有输入的整数成绩 while (input.hasNextInt()) { int score = input.nextInt(); scoresList.add(score); sum += score; } input.close(); int num = scoresList.size(); // 无输入时的边界处理,避免除0报错 if(num == 0){ System.out.println("未输入有效成绩"); return; } double average = sum / num; double totalDeviation = 0; for (int score : scoresList) { totalDeviation += Math.pow(score - average, 2); } double sd = Math.sqrt(totalDeviation / num); // 所有结果保留2位小数,整型num转double适配格式符 System.out.printf("Total number of quiz scores = %.2f %n", (double)num); System.out.printf("Average = %.2f %n", average); System.out.printf("Standard deviation = %.2f %n", sd); } }
使用说明
运行程序后输入所有成绩(空格/换行分隔均可),输入完成后按Ctrl+D(Windows系统按Ctrl+Z后回车)结束输入,即可得到计算结果。比如输入10 20 30,输出为:
Total number of quiz scores = 3.00 Average = 20.00 Standard deviation = 8.16
内容的提问来源于stack exchange,提问作者Qican WANG
相关产品推荐
相关产品推荐

