Java 学生成绩统计系统实战:二维数组与Swing界面综合应用
一、原题完整代码呈现
以下是计算机二级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
字符串已拼接好所有要显示的内容(数组、最高分、平均分),需通过JTextArea
的setText(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门成绩,实现以下功能:
- 创建Swing窗口,使用
JTextArea
展示成绩信息 - 格式化输出成绩数组(按行和列展示)
- 计算所有成绩中的最高分
- 计算每个学生的平均分
- 将所有结果整合后显示在文本区域中
运行说明
初始化与界面创建:
- 二维数组
grades
存储成绩:3行(学生)4列(考试) students = grades.length
(3名学生),exams = grades[0].length
(4门考试)- 创建
JFrame
窗口,设置大小(300×300)、可见性及关闭行为 - 创建
JTextArea
组件outputArea
,添加到窗口内容面板
- 二维数组
数据处理与字符串拼接:
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
界面展示结果:
文本区域显示内容如下:数组是: [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
五、核心知识点总结
二维数组的操作
- 定义与初始化:
int grades[][] = {{...}, {...}, {...}}
声明并初始化二维数组,每行可视为一个学生的成绩列表 - 长度获取:
grades.length
得到行数(学生数),grades[0].length
得到列数(考试数) - 元素访问:
grades[i][j]
访问第i个学生的第j门成绩,通过双层循环遍历所有元素
- 定义与初始化:
Swing界面组件
JFrame
:窗口容器,用于承载其他组件,需设置大小、可见性和关闭行为JTextArea
:多行文本区域,适合展示大量格式化文本,通过setText(String)
设置内容- 容器管理:窗口的内容面板(
getContentPane()
)是添加组件的载体,使用add(Component)
方法添加组件
成绩统计算法
- 最高分计算:通过双层循环比较所有元素,用变量
highGrade
记录当前最大值,遇到更大值时更新 - 平均分计算:对单个学生的成绩数组(一维数组)遍历累加,总和除以考试数(
exams
),利用整数除法取整
- 最高分计算:通过双层循环比较所有元素,用变量
字符串拼接与格式化
buildString()
方法:通过循环拼接数组索引和元素,使用\n
换行、空格对齐,生成类似表格的可视化效果- 结果整合:将数组、最高分、平均分等信息逐步拼接到
output
字符串,最终一次性设置到文本区域,提高效率
六、常见错误与应试技巧
常见错误分析
- 第一处空白组件实例化错误:写成
JTextArea()
的拼写错误(如JTextAera
)或遗漏new
关键字 - 第二处空白组件添加错误:写成组件类型
JTextArea
(应添加实例outputArea
)或其他变量名 - 第三处空白循环条件错误:写成
exams
(循环次数为考试数,与学生数不符)或grades.length-1
(多减1导致少算一个学生) - 第四处空白文本设置方法错误:写成
setContent
(无此方法)或append
(追加而非覆盖,可能显示冗余内容) - 第五处空白最高分更新错误:写成
grades[i]
(二维数组行引用,非具体成绩)或highGrade
(未更新,始终为初始值0) - 第六处空白成绩累加错误:写成
grades[i][j]
(方法参数是一维数组,无需二维索引)或setOfGrades
(数组引用,无法累加)
- 第一处空白组件实例化错误:写成
应试技巧
- 组件操作:“文本区域JTextArea,new实例要牢记,添加到容器用add,实例对象别忘记”
- 循环控制:“遍历学生用students,遍历考试用exams,数组长度作上限,循环索引别越界”
- 算法逻辑:“最高分找最大,逐个比较更新它;平均分算总和,除以科目得结果”
- 字符串处理:“分步拼接内容全,换行空格调格式,setText一次性,界面展示更直观”
通过本题,我们掌握了二维数组的遍历与操作、Swing组件的创建与使用、成绩统计的核心算法(最高分、平均分),以及字符串格式化技巧。这类题型是“数据结构+GUI展示+算法实现”的综合体现,对理解Java中多维数组应用和界面数据呈现具有重要意义。