我试图通过提示找到数组中的最高标记和最低标记

时间:2015-06-06 04:21:15

标签: javascript arrays

因此,我的老师为我们指派了一个程序,以便找到最多15名学生的最高和最低分。因此,可以安排不到15名学生。用户必须输入学生的姓名并在学生的标记后面输入。在所有学生的姓名和商标都输入之后,它会想要比较这些商标以找到最少和最大的商标。

CODE:

var Students = ["sn1", "sn2", "sn3", "sn4", "sn5", "sn6", "sn7", "sn8", "sn9", "sn10", "sn11", "sn12", "sn13", "sn14", "sn15"]; //student's name array
var Marks = ["sm1", "sm2", "sm3", "sm4", "sm5", "sm6", "sm7", "sm8", "sm9", "sm10", "sm11", "sm12", "sm13", "sm14", "sm15"]; //student's marks array
Students[0] = prompt("Student 1's name.");
    if(Students[0].length == 0) { 
        Marks[0] = null
    } else {
        Marks[0] = prompt("Student 1's mark."); //I just copied and pasted this 15 times and changed  the [0] to the next number.
        while(isNaN(Marks[0]) || Marks[0] >= 101 || Marks[0] <= -101) { //if number is greater than or equal to 101, or less than or equal to -1. Prevents a mark higher than 100 and less than 0.
        window.alert("Please input a number between 0-100.");
        Marks[0] = 0
        Marks[0] = prompt("Student 1's mark."); //reprompt.
    }
}
console.log(Students[0] + " " + Marks[0]); //displays mark.

var greatest = -100; //my friend did this part so I don't know if it's right.
var least = 100;
var trackg = 0;
var trackl = 0;
if (Marks[x] != null){ //if this isn't here then I get an error with null.length can't be measured below.
    for(var x = 0; x < Marks.length; x ++) {
        if(Marks[x].length == 2) {
            " " + Marks[x];
        }
        if(Marks[x] >= greatest && Marks[x] != null) {
            greatest = Marks[x]
            trackg = x
        }
    }
}
for(var j = 0; j < Marks.length; j ++) { //the marks[x] != null doesn't work here. it will show that the greatest number is the least number as well which it isn't.
    if (Marks[j] <= least && Marks[j] != null){
            least = Marks[j];
            trackl = j;
    }
}
console.log(Students[trackg] + " has the highest mark of " + Marks[trackg] + ". " + Students[trackl] + " has the lowest mark of " + Marks[trackl] + "."); 

问题: 1.当它比较数字时,它只取第一个数字作为最大数字。所以我要说第一个学生的标记为99,之后我将第二个学生的标记为100.它表示99是最高分,而最低分为负数。

2.如果我输入100,我也会得到,29,99等数字的数字更高,因为1&lt; 2或9等。

3.对于负数,如果我把-13和-99,-13表示它是最低的,它不是。

  1. 另外,如果我输入10和100(即使是负数),则10更大/最小。
  2. 我尝试了很多东西而且我不知道什么是错的。 (顺便说一下这是我第一次使用javascript)。这个作业将于星期一到期。谢谢; A;

1 个答案:

答案 0 :(得分:0)

这是一个如何做到这一点的例子。请注意验证是如何完成的,以及将用户输入转换为实际数字以进行比较。只需要一个主循环; while循环用于确保用户输入有效数据。

您无需将所有学生的数据实际存储为数组,以显示最高和最低结果。

var students = [];
var numOfStudents, highest = { mark:-1 }, lowest = { mark:101 };

// Get number of students between 1 and 15
while (isNaN(numOfStudents) || numOfStudents <= 0 || numOfStudents > 15)
    numOfStudents = parseInt(prompt('How many students? (1-15)', '1'), 10);

// For each student, get the name and mark
for (i = 1; i <= numOfStudents; i++) {

    var student = {};
    while (typeof student.name === 'undefined' || student.name == '')
        student.name = prompt('Enter Student '+i+' name:', '');
    
    while (typeof student.mark === 'undefined' || isNaN(student.mark) || student.mark < 0 || student.mark > 100)
        student.mark = parseFloat(prompt('Enter Student '+i+' mark (0-100):', ''));
    
    // Check if highest or lowest
    if(student.mark > highest.mark) highest = student;
    if(student.mark < lowest.mark) lowest = student;
    
    // Save current student to the list (optional)
    students.push(student);
}

// Display result
document.body.innerHTML = highest.name + " has the highest mark of " + highest.mark + ". " + lowest.name + " has the lowest mark of " + lowest.mark + ".";