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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:15:07