根据最佳成绩查找成绩
Finding the grade based on the best score
所以我的程序希望用户输入学生人数和他们的分数。根据最佳分数,它将遵循以下评分方案:
- 得分 > or = 最好 - 10 则成绩为 A。
- 分数>或=最好 - 20则成绩为B。
- 分数>或=最好 - 30则成绩为C。
- 分数 > 或 = 最好 - 40 则等级为 D。
- 其他都是F
到目前为止,这是我的代码:
var readlineSync = require('readline-sync')
let scoreArray = []
let best = 0
students = readlineSync.question('Enter the number of students: ');
for (var x = 0; x < students; x++){
score = readlineSync.question('Enter Score: ')
scoreArray.push(score);
}
for (var i = 0; i < scoreArray.length; i++){
var data = scoreArray[i];
if(best < scoreArray[i]){
best = scoreArray[i];
}
if(scoreArray[i] >= (best-10)){
grade = 'A';
}else if(scoreArray[i] >= (best-20)){
grade = 'B';
}else if(scoreArray[i] >= (best-30)){
grade = 'C';
}else if(scoreArray[i] >= (best-40)){
grade = 'D';
}else {
grade = 'F';
}
console.log('Student ' + i + ' score is ' + scoreArray[i] +' and grade is ' + grade);
}
当我 运行 代码时,它有时会显示正确的成绩,有时却不会。它应该显示:
- 请输入学生人数:4
- 输入分数:40
- 输入分数:55
- 输入分数:70
- 输入分数:58
- 学生0分40分,成绩C。学生1分55分,成绩
是 B。学生 2 的分数是 70,等级是 A。学生 3 的分数是 58,并且
成绩是B.
而是显示等级 A、A、A、B。
看起来您正在迭代 scoreArray
并在此过程中进行最佳更新。您应该首先从 scoreArray
中获得最高分数,这样您就知道最好的开始,然后迭代 scoreArray
。有关更多信息,请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max,但将 var best = Math.max(...scoreArray);
放在 for 循环之前,然后您的条件逻辑应该可以工作。
scoreArray = [49, 81, 72, 80, 81, 36, 58];
var best = Math.max(...scoreArray);
for (var i = 0; i < scoreArray.length; i++) {
var data = scoreArray[i];
if (scoreArray[i] >= (best - 10)) {
grade = 'A';
} else if (scoreArray[i] >= (best - 20)) {
grade = 'B';
} else if (scoreArray[i] >= (best - 30)) {
grade = 'C';
} else if (scoreArray[i] >= (best - 40)) {
grade = 'D';
} else {
grade = 'F';
}
console.log('Student ' + i + ' score is ' + scoreArray[i] + ' and grade is ' + grade);
}
所以我的程序希望用户输入学生人数和他们的分数。根据最佳分数,它将遵循以下评分方案:
- 得分 > or = 最好 - 10 则成绩为 A。
- 分数>或=最好 - 20则成绩为B。
- 分数>或=最好 - 30则成绩为C。
- 分数 > 或 = 最好 - 40 则等级为 D。
- 其他都是F
到目前为止,这是我的代码:
var readlineSync = require('readline-sync')
let scoreArray = []
let best = 0
students = readlineSync.question('Enter the number of students: ');
for (var x = 0; x < students; x++){
score = readlineSync.question('Enter Score: ')
scoreArray.push(score);
}
for (var i = 0; i < scoreArray.length; i++){
var data = scoreArray[i];
if(best < scoreArray[i]){
best = scoreArray[i];
}
if(scoreArray[i] >= (best-10)){
grade = 'A';
}else if(scoreArray[i] >= (best-20)){
grade = 'B';
}else if(scoreArray[i] >= (best-30)){
grade = 'C';
}else if(scoreArray[i] >= (best-40)){
grade = 'D';
}else {
grade = 'F';
}
console.log('Student ' + i + ' score is ' + scoreArray[i] +' and grade is ' + grade);
}
当我 运行 代码时,它有时会显示正确的成绩,有时却不会。它应该显示:
- 请输入学生人数:4
- 输入分数:40
- 输入分数:55
- 输入分数:70
- 输入分数:58
- 学生0分40分,成绩C。学生1分55分,成绩 是 B。学生 2 的分数是 70,等级是 A。学生 3 的分数是 58,并且 成绩是B.
而是显示等级 A、A、A、B。
看起来您正在迭代 scoreArray
并在此过程中进行最佳更新。您应该首先从 scoreArray
中获得最高分数,这样您就知道最好的开始,然后迭代 scoreArray
。有关更多信息,请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max,但将 var best = Math.max(...scoreArray);
放在 for 循环之前,然后您的条件逻辑应该可以工作。
scoreArray = [49, 81, 72, 80, 81, 36, 58];
var best = Math.max(...scoreArray);
for (var i = 0; i < scoreArray.length; i++) {
var data = scoreArray[i];
if (scoreArray[i] >= (best - 10)) {
grade = 'A';
} else if (scoreArray[i] >= (best - 20)) {
grade = 'B';
} else if (scoreArray[i] >= (best - 30)) {
grade = 'C';
} else if (scoreArray[i] >= (best - 40)) {
grade = 'D';
} else {
grade = 'F';
}
console.log('Student ' + i + ' score is ' + scoreArray[i] + ' and grade is ' + grade);
}