抄代码DAY3

今天是抄代码第三天。(简易的学生成绩管理系统)

内容是:

学生的成绩存放于一个矩阵,其中行表示学生,列表示科目。如:第 0 行表示第 0 个学生的数学、语文、英语成绩。要求:

  1. 进行学生成绩的随机生成, 区间为 [50, 100].
  2. 找出成绩最好、最差的同学。但有挂科的同学不参加评比

用随机生成数函数生成一个数,但这个数大于50。利用for循环存储在矩阵中。

		Random tempRandom = new Random();
		int[][] data = new int[n][m];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				data[i][j] = lowerBound + tempRandom.nextInt(upperBound - lowerBound);
			} 
		} 

		System.out.println("The data is:\r\n" + Arrays.deepToString(data));

再次利用for循环来遍历矩阵中存储的数据,当小于60时总成绩(totalScores) 设置为0。当大于60分时,就利用循环计算总成绩。

		int[] totalScores = new int[n];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				if (data[i][j] < threshold) {
					totalScores[i] = 0;
					break;
				} 

				totalScores[i] += data[i][j];
			} 
		} 

		System.out.println("The total scores are:\r\n" + Arrays.toString(totalScores));

 在数据中寻找最好的、最差的,首先初始化最佳值、最差值,对于不及格的学生不做考察范围之内。如果都没有及格,tempBestIndex的值就还是初始值。

		int tempBestIndex = -1;
		int tempWorstIndex = -1;
		// 初始化最佳值和最差值
		
		int tempBestScore = 0;
		int tempWorstScore = m * upperBound + 1;
		for (int i = 0; i < n; i++) {
			
			if (totalScores[i] == 0) {
				continue;
                // 不及格的学生不作考察
			} 

			if (tempBestScore < totalScores[i]) {
				tempBestScore = totalScores[i];
				tempBestIndex = i;
	        } //查找最好的学生

			if (tempWorstScore > totalScores[i]) {
				tempWorstScore = totalScores[i];
				tempWorstIndex = i;
			} //查找最差的学生
		} 

判断指标值是否为-1,若是,代表无最佳、最差;如果不是,输出最佳和最差。

	if (tempBestIndex == -1) {
			System.out.println("Cannot find best student. All students have failed.");
		} //判断
    else {
			System.out.println("The best student is No." + tempBestIndex + " with scores: "
					+ Arrays.toString(data[tempBestIndex]));
		} 

		if (tempWorstIndex == -1) {
			System.out.println("Cannot find worst student. All students have failed.");
		} //判断
        else {
			System.out.println("The worst student is No." + tempWorstIndex + " with scores: "
					+ Arrays.toString(data[tempWorstIndex]));
		} 
	}

参数设置:学生人数,科目数,最高分,最低分,及格分

		int n = 9;//student number
		int m = 3;//course number
		int lowerBound = 50;
		int upperBound = 100; // 满分
		int threshold = 60;//this means pass.

 呈现几组运行结果:

 

前两组数据设置的最高分是65,会发现最高分最低分可能是同一个人。 因为在随机数设置在0-15之间,生成0-10之间的数概率很大。

		Random tempRandom = new Random();
		int[][] data = new int[n][m];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				data[i][j] = lowerBound + tempRandom.nextInt(50);
			} 
		} 

 我直接将生成数范围写成50,这样避免出现上面的情况。当然也可以将upperBound的值设置为100。

 数据设置为满分100时的结果。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值