使用二维数组实现存储学生成绩

需求:1、定义一个20*5的二维数组,用来存储某班级20位学员的5门课的成绩;这5门课 按存储顺序依次为:core,C++,coreJava,Servlet,JSP和EJB

2、循环给二维数组的每一个元素赋0~100之间的随机整数。3、按照列表的方式输出这些学员的每门课程的成绩。4、要求编写程序求每个学员的总分,将其保留在另外一个一维数组中。5、要求编写程序求所有学员的某门课程的平均分。

import java.util.Random;
public class StudentScore {

	public static void main(String[] args) {
		int[][] arr = new int[20][5];// 定义一个二维数组
		Random rd = new Random();// 创建Random对象
		int[] totalScores = new int[20];// 定义一个一维数组用于存储每个学员的总分
		int[] avgClassScores = new int[5];// 定义一个数组存储所有学员某门课程的平均分
		System.out.println("            \t学员成绩表");
		System.out.println("学员编号\t" + "coreC++\t" + "coreJava" + "Servlet\t"
				+ "JSP\t" + "EJB\t" + "总成绩");
		for (int i = 0; i < arr.length; i++) {
			System.out.print((i + 1) + "\t");//学员编号
			for (int j = 0; j < arr[i].length; j++) {
				arr[i][j] = rd.nextInt(80) + 20;//生成成绩(为了好看,最少20分以上吧)
				totalScores[i] += arr[i][j];//加入总成绩数组
				System.out.print(arr[i][j] + "\t");//打印该门成绩
				avgClassScores[j] += arr[i][j];//加入单科成绩数组
			}
			System.out.print(totalScores[i] + "\n");
			System.out
					.println("———————————————————————————————————————————————————————");
		}
		System.out.print("平均分");
		for (int x = 0; x < avgClassScores.length; x++) {
			System.out.print("\t" + avgClassScores[x] /20.0);//输出打印平均成绩
		}
	}
}

运行结果图:ps:由于20个学生数据较长,截图不能全部截下,这里为了演示结果,临时改为10个。


考虑到想进一步实现按照总成绩高低顺序输出,代码改进如下:

public class StudentScore {
	private int coreC_Score;
	private int coreJava_Score;
	private int Servlet_Score;
	private int JSP_Score;
	private int EJB_Score;
	private int totalScores;
	int arr[];

	public StudentScore(int[] arr) {
		this.arr = arr;
		this.coreC_Score = arr[0];
		this.coreJava_Score = arr[1];
		this.Servlet_Score = arr[2];
		this.JSP_Score = arr[3];
		this.EJB_Score = arr[4];
		this.totalScores = arr[5];// 总成绩
	}

	public int getCoreC_Score() {
		return coreC_Score;
	}

	public void setCoreC_Score(int coreC_Score) {
		this.coreC_Score = coreC_Score;
	}

	public int getCoreJava_Score() {
		return coreJava_Score;
	}

	public void setCoreJava_Score(int coreJava_Score) {
		this.coreJava_Score = coreJava_Score;
	}

	public int getServlet_Score() {
		return Servlet_Score;
	}

	public void setServlet_Score(int servlet_Score) {
		Servlet_Score = servlet_Score;
	}

	public int getJSP_Score() {
		return JSP_Score;
	}

	public void setJSP_Score(int jSP_Score) {
		JSP_Score = jSP_Score;
	}

	public int getEJB_Score() {
		return EJB_Score;
	}

	public void setEJB_Score(int eJB_Score) {
		EJB_Score = eJB_Score;
	}

	public int getTotalScores() {
		return totalScores;
	}

	public void setTotalScores(int totalScores) {
		this.totalScores = totalScores;
	}

}

接下来,写一个比较类

import java.util.Comparator;

public class MyCompare implements Comparator<StudentScore> {

	@Override
	public int compare(StudentScore o1, StudentScore o2) {

		return Integer.valueOf(o2.getTotalScores()).compareTo(
				Integer.valueOf(o1.getTotalScores()));

	}

}

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class StudentScore2{

	public static void main(String[] args) {
		List<StudentScore> list = new ArrayList<StudentScore>();//创建ArrayList集合
		int[] arr = new int[6];
		int[] avgClassScores = new int[5];// 定义一个数组存储所有学员某门课程的平均分
		Random rd = new Random();// 创建Random对象
		for (int i = 1; i <= 20; i++) {
			int sum = 0;
			for (int j = 0; j <= 4; j++) {
				arr[j] = rd.nextInt(80) + 20;//生成成绩
				sum += arr[j];
				avgClassScores[j] += arr[j];
			}
			arr[5] = sum;
			StudentScore stus = new StudentScore(arr);
			list.add(stus);
		}
		Collections.sort(list, new MyCompare());//根据比较器排序
		System.out.println("            \t学员成绩表");
		System.out.print("学员编号\t" + "coreC++\t" + "coreJava" + "Servlet\t"
				+ "JSP\t" + "EJB\t" + "总成绩\t\n");
		for (int i = 0; i < 20; i++) {
			System.out.print((i + 1) + "\t");
			StudentScore studentScore = list.get(i);
			System.out.print(studentScore.getCoreC_Score() + "\t");
			System.out.print(studentScore.getCoreJava_Score() + "\t");
			System.out.print(studentScore.getEJB_Score() + "\t");
			System.out.print(studentScore.getJSP_Score() + "\t");
			System.out.print(studentScore.getServlet_Score() + "\t");
			System.out.print(studentScore.getTotalScores() + "\n");
			System.out
					.println("———————————————————————————————————————————————————————");
		}

		System.out.print("平均分");
		for (int x = 0; x < avgClassScores.length; x++) {
			int avg = Math.round(avgClassScores[x] / 20);
			System.out.print("\t" + avg);
		}

	}
}

运行结果图:实现了按成绩由高到低的排序输出。


  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值