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

连续两个if语句后能否用for循环?Java程序序列及报错求助

解决Java成绩统计程序的执行顺序与数组越界问题

先来理清执行顺序的核心逻辑:必须把合法性检查放在最前面——先确认输入的成绩数据符合要求(比如数组非空、有效数据量大于0),如果不满足就直接输出错误提示并终止程序;等检查通过后,再去执行计算总和、查找最值的循环。这样能从源头避免很多运行时错误,包括你遇到的数组越界问题。

至于你碰到的Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0,这个错误几乎肯定是因为你尝试访问了长度为0的数组的第0个元素,或者数组根本没被正确初始化(比如只声明了int[] scores;但没分配内存、没赋值)。比如你可能在没确认数组有元素的情况下,就直接拿scores[0]当最值的初始值,这时候数组为空就会触发报错。

下面给你一个完整的、正确的代码结构框架,包含所有必要的逻辑:

import java.util.Scanner;

public class ScoreStatistics {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 第一步:获取输入的成绩数量
        System.out.print("请输入成绩的数量:");
        int scoreCount = scanner.nextInt();
        
        // 第二步:前置条件检查(核心!先做检查再执行后续逻辑)
        if (scoreCount <= 0) {
            System.err.println("错误:成绩数量必须大于0,请重新输入!");
            scanner.close();
            return; // 直接终止程序,不执行后面的循环
        }
        
        // 初始化成绩数组并读取输入
        int[] scores = new int[scoreCount];
        System.out.println("请输入" + scoreCount + "个成绩:");
        for (int i = 0; i < scoreCount; i++) {
            scores[i] = scanner.nextInt();
        }
        
        // 第三步:计算成绩总和
        int totalScore = 0;
        for (int score : scores) {
            totalScore += score;
        }
        
        // 第四步:查找最高/最低成绩
        int maxScore = scores[0];
        int minScore = scores[0];
        for (int score : scores) {
            if (score > maxScore) {
                maxScore = score;
            }
            if (score < minScore) {
                minScore = score;
            }
        }
        
        // 输出统计结果
        System.out.println("\n成绩统计结果:");
        System.out.println("总成绩:" + totalScore);
        System.out.println("最高成绩:" + maxScore);
        System.out.println("最低成绩:" + minScore);
        
        scanner.close();
    }
}

额外优化提示:

如果想减少一次数组遍历,你可以把总和计算和最值查找合并到同一个循环里,效率更高:

int totalScore = 0;
int maxScore = scores[0];
int minScore = scores[0];
for (int score : scores) {
    totalScore += score;
    if (score > maxScore) maxScore = score;
    if (score < minScore) minScore = score;
}

如果你的程序是通过方法参数传入成绩数组,别忘了先检查数组是否为空:

public static void analyzeScores(int[] scores) {
    // 检查数组合法性
    if (scores == null || scores.length == 0) {
        System.err.println("错误:成绩数组不能为空或长度为0!");
        return;
    }
    
    // 后续的统计逻辑...
}

内容的提问来源于stack exchange,提问作者4-Aug

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:57:36