Java程序员_编程开发学习笔记_网站安全运维教程_渗透技术教程

Java 学生成绩统计系统实战:二维数组与Swing界面综合应用

阿贵
3天前发布 /正在检测是否收录...
温馨提示:
本文最后更新于2025年09月07日,已超过3天没有更新,若内容或图片失效,请留言反馈。

Java 学生成绩统计系统实战:二维数组与Swing界面综合应用

117.png

一、原题完整代码呈现

以下是计算机二级Java考试中关于二维数组操作、Swing界面展示及成绩统计(最高分、平均分)的典型题型,主要考察组件实例化、容器添加、循环控制、文本设置及数组元素访问,包含6处需要填写的空白(标记为//*********Found**********):

import java.awt.*;
import javax.swing.*;

public class Java_2{
    int grades[][] = { { 77, 68, 86, 73 },
                        { 96, 87, 89, 81 },
                        { 70, 90, 86, 81 } };
    int students, exams;
    String output;
    JTextArea outputArea;
    
    public Java_2(){    
        students = grades.length;
        exams = grades[ 0 ].length;
        
        JFrame f = new JFrame();
        f.setSize(300,300);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //*********Found**********
        outputArea = new ________________();
        Container c = f.getContentPane();
        //*********Found**********
        c.add( ________________ );
        
        output = "数组是:";
        buildString();
        output += "\n\n最高分: " + maximum() + "\n";
         //*********Found**********
        for ( int i = 0; i < ________________; i++ )
            output += "\n第" + (i+1) + "个学生的平均分是: " +
                    average( grades[ i ] );
         //*********Found**********
        outputArea.________________( output );
    }
    
    
    //找最高分
    public int maximum(){
        int highGrade = 0;
        for ( int i = 0; i < students; i++ )
            for ( int j = 0; j < exams; j++ )
                if ( grades[ i ][ j ] > highGrade )
                     //*********Found**********
                    highGrade = ________________;
        return highGrade;
    }
    //对各组学生确定平均分
    public int average( int setOfGrades[] ){
        int total = 0;
        for ( int i = 0; i < setOfGrades.length; i++ )
             //*********Found**********
            total += ________________;
       
        return total /exams;
    }
    //输出格式
    public void buildString(){
        output += "        ";
        for ( int i = 0; i < exams; i++ )
            output += "[" + i + "]   ";
        for ( int i = 0; i < students; i++ ) {
            output += "\ngrades[" + i + "]   ";
            for ( int j = 0; j < exams; j++ )
                output += grades[ i ][ j ] + "   ";
        }
    }
    
    public static void main(String[ ]args){
        new Java_2();
    }
}

二、空白处逐一解析与解答

1. 第一处空白:JTextArea组件的实例化

答案:JTextArea

        //*********Found**********
        outputArea = new JTextArea();

解析
outputArea被声明为JTextArea类型(用于展示多行文本),需通过new JTextArea()创建实例。该组件用于显示成绩数组、最高分和平均分等信息,因此填写JTextArea

2. 第二处空白:添加到容器的组件

答案:outputArea

        //*********Found**********
        c.add( outputArea );

解析
c是窗口的内容面板(Container),需将创建的outputArea(文本区域组件)添加到容器中,才能在窗口中显示。因此填写组件对象名outputArea

3. 第三处空白:循环的学生数量上限

答案:students

         //*********Found**********
        for ( int i = 0; i < students; i++ )

解析
该循环用于计算每个学生的平均分,students变量存储学生数量(grades.length,二维数组的行数),循环需遍历所有学生(从0到students-1),因此条件为i < students,填写students

4. 第四处空白:设置文本区域内容的方法

答案:setText

         //*********Found**********
        outputArea.setText( output );

解析
output字符串已拼接好所有要显示的内容(数组、最高分、平均分),需通过JTextAreasetText(String)方法将内容设置到文本区域,因此填写setText

5. 第五处空白:更新最高分的数组元素

答案:grades[i][j]

                     //*********Found**********
                    highGrade = grades[i][j];

解析
maximum方法用于查找所有成绩中的最高分。当grades[i][j](第i个学生的第j门成绩)大于当前highGrade时,需将highGrade更新为该成绩,因此填写grades[i][j]

6. 第六处空白:累加学生成绩的数组元素

答案:setOfGrades[i]

             //*********Found**********
            total += setOfGrades[i];

解析
average方法计算单个学生的平均分,setOfGrades是该学生的成绩数组(一维数组)。循环遍历数组元素,累加总分(total),因此每次累加setOfGrades[i],填写该表达式。

三、完整正确代码

四、程序功能与运行说明

程序功能

该程序通过二维数组存储3名学生的4门成绩,实现以下功能:

  1. 创建Swing窗口,使用JTextArea展示成绩信息
  2. 格式化输出成绩数组(按行和列展示)
  3. 计算所有成绩中的最高分
  4. 计算每个学生的平均分
  5. 将所有结果整合后显示在文本区域中
运行说明
  1. 初始化与界面创建:

    • 二维数组grades存储成绩:3行(学生)4列(考试)
    • students = grades.length(3名学生),exams = grades[0].length(4门考试)
    • 创建JFrame窗口,设置大小(300×300)、可见性及关闭行为
    • 创建JTextArea组件outputArea,添加到窗口内容面板
  2. 数据处理与字符串拼接:

    • buildString()方法:格式化成绩数组,生成类似表格的字符串(包含行列索引和成绩)
    • maximum()方法:双层循环遍历所有成绩,找出最高分(示例中为96)
    • 循环3次(每个学生),调用average(grades[i])计算平均分:

      • 第1名学生:(77+68+86+73)/4 = 76
      • 第2名学生:(96+87+89+81)/4 = 88
      • 第3名学生:(70+90+86+81)/4 = 81.75 → 取整为81
  3. 界面展示结果:
    文本区域显示内容如下:

    数组是:        
    [0]   [1]   [2]   [3]   
    grades[0]   77   68   86   73   
    grades[1]   96   87   89   81   
    grades[2]   70   90   86   81   
    
    最高分: 96
    
    第1个学生的平均分是: 76
    第2个学生的平均分是: 88
    第3个学生的平均分是: 81

五、核心知识点总结

  1. 二维数组的操作

    • 定义与初始化:int grades[][] = {{...}, {...}, {...}} 声明并初始化二维数组,每行可视为一个学生的成绩列表
    • 长度获取:grades.length 得到行数(学生数),grades[0].length 得到列数(考试数)
    • 元素访问:grades[i][j] 访问第i个学生的第j门成绩,通过双层循环遍历所有元素
  2. Swing界面组件

    • JFrame:窗口容器,用于承载其他组件,需设置大小、可见性和关闭行为
    • JTextArea:多行文本区域,适合展示大量格式化文本,通过setText(String)设置内容
    • 容器管理:窗口的内容面板(getContentPane())是添加组件的载体,使用add(Component)方法添加组件
  3. 成绩统计算法

    • 最高分计算:通过双层循环比较所有元素,用变量highGrade记录当前最大值,遇到更大值时更新
    • 平均分计算:对单个学生的成绩数组(一维数组)遍历累加,总和除以考试数(exams),利用整数除法取整
  4. 字符串拼接与格式化

    • buildString()方法:通过循环拼接数组索引和元素,使用\n换行、空格对齐,生成类似表格的可视化效果
    • 结果整合:将数组、最高分、平均分等信息逐步拼接到output字符串,最终一次性设置到文本区域,提高效率

六、常见错误与应试技巧

  1. 常见错误分析

    • 第一处空白组件实例化错误:写成JTextArea()的拼写错误(如JTextAera)或遗漏new关键字
    • 第二处空白组件添加错误:写成组件类型JTextArea(应添加实例outputArea)或其他变量名
    • 第三处空白循环条件错误:写成exams(循环次数为考试数,与学生数不符)或grades.length-1(多减1导致少算一个学生)
    • 第四处空白文本设置方法错误:写成setContent(无此方法)或append(追加而非覆盖,可能显示冗余内容)
    • 第五处空白最高分更新错误:写成grades[i](二维数组行引用,非具体成绩)或highGrade(未更新,始终为初始值0)
    • 第六处空白成绩累加错误:写成grades[i][j](方法参数是一维数组,无需二维索引)或setOfGrades(数组引用,无法累加)
  2. 应试技巧

    • 组件操作:“文本区域JTextArea,new实例要牢记,添加到容器用add,实例对象别忘记”
    • 循环控制:“遍历学生用students,遍历考试用exams,数组长度作上限,循环索引别越界”
    • 算法逻辑:“最高分找最大,逐个比较更新它;平均分算总和,除以科目得结果”
    • 字符串处理:“分步拼接内容全,换行空格调格式,setText一次性,界面展示更直观”

通过本题,我们掌握了二维数组的遍历与操作、Swing组件的创建与使用、成绩统计的核心算法(最高分、平均分),以及字符串格式化技巧。这类题型是“数据结构+GUI展示+算法实现”的综合体现,对理解Java中多维数组应用和界面数据呈现具有重要意义。

喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消 登录评论