今天是抄代码第三天。(简易的学生成绩管理系统)
内容是:
学生的成绩存放于一个矩阵,其中行表示学生,列表示科目。如:第 0 行表示第 0 个学生的数学、语文、英语成绩。要求:
- 进行学生成绩的随机生成, 区间为 [50, 100].
- 找出成绩最好、最差的同学。但有挂科的同学不参加评比
用随机生成数函数生成一个数,但这个数大于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时的结果。