Javascript 成绩统计计算器
我想获得一些关于我的javascript代码的帮助。我制作了一个成绩统计计算器,可以显示以下方面的结果: 最低–最高学生成绩 最小值–最大学生平均值 最低–最高课程成绩 最低–最高课程平均成绩 您可以在此处访问它-->并按“显示结果”按钮查看我的输出。(您可以更改名称和等级以获得不同的输出) 我的问题是,我无法理解为什么它不能在最小-最大课程成绩上显示正确的课程名称,尽管它显示的成绩是正确的。我也不明白为什么它错误地计算了最低和最高课程平均成绩,并错误地显示了相应的课程名称 任何帮助都将不胜感激:) .js代码:Javascript 成绩统计计算器,javascript,html,css,calculator,Javascript,Html,Css,Calculator,我想获得一些关于我的javascript代码的帮助。我制作了一个成绩统计计算器,可以显示以下方面的结果: 最低–最高学生成绩 最小值–最大学生平均值 最低–最高课程成绩 最低–最高课程平均成绩 您可以在此处访问它-->并按“显示结果”按钮查看我的输出。(您可以更改名称和等级以获得不同的输出) 我的问题是,我无法理解为什么它不能在最小-最大课程成绩上显示正确的课程名称,尽管它显示的成绩是正确的。我也不明白为什么它错误地计算了最低和最高课程平均成绩,并错误地显示了相应的课程名称 任何帮助都将不胜感激
var Course0 = Array(6);
var Course1 = Array(6);
var Course2 = Array(6);
var Student = Array(6);
var CMap = [Course0, Course1, Course2];
var NMap = ["Course0", "Course1", "Course2"];
var showResults = function () {
var Rows = document.getElementsByClassName("srow");
for (var i = 1; i < Rows.length - 1; i++) {
var values = Rows[i].getElementsByTagName("input");
Student[i - 1] = values[0].value;
for (var j = 1; j < values.length; j++) {
CMap[j - 1][i - 1] = values[j].value;
}
}
var MinID = MaxID = AvgMinID = AvgMaxID = 0;
var Min = Max = AvgMin = AvgMax = undefined;
for (var i = 0; i < Student.length; i++) {
var c0 = Course0[i];
var c1 = Course1[i];
var c2 = Course2[i];
var lessonMin = Math.min(c0, c1, c2);
var lessonMax = Math.max(c0, c1, c2);
if ((lessonMin <= Min) || (typeof Min === "undefined")) {
MinID = i;
Min = lessonMin;
}
if ((lessonMax >= Max) || (typeof Max === "undefined")) {
MaxID = i;
Max = lessonMax;
}
var Avg = Math.avg(c0, c1, c2);
if ((Avg < AvgMin) || (typeof AvgMin === "undefined")) {
AvgMinID = i;
AvgMin = Avg;
}
if ((Avg > AvgMax) || (typeof AvgMax === "undefined")) {
AvgMaxID = i;
AvgMax = Avg;
}
}
var Wrapper = document.getElementById("student-results");
Wrapper.innerHTML = "";
Wrapper.innerHTML += "<span>The Student with lower grade is: " + Student[MinID] + ", Equals To " + Min + "</span>";
Wrapper.innerHTML += "<span>The Student with higher grade is: " + Student[MaxID] + ", Equals To " + Max + "</span>";
Wrapper.innerHTML += "<hr />";
Wrapper.innerHTML += "<span>The Student with lower average grade is: " + Student[AvgMinID] + ", Equals To " + AvgMin + "</span>";
Wrapper.innerHTML += "<span>The Student with higher average grade is: " + Student[AvgMaxID] + ", Equals To " + AvgMax + "</span>";
var CourseMin = CourseMinID = CourseMax = CourseMaxID = CourseAvgMin = CourseAvgMinID = CourseAvgMax = CourseAvgMaxID = 0;
CourseMin = CourseMax = CourseAvgMin = CourseAvgMax = undefined;
for (var i = 0, j = 0; i < Student.length; i++, j += .5) {
var c0 = Course0;
var c1 = Course1;
var c2 = Course2;
var CheckMin = Math.min(c0[i], c1[i], c2[i]);
if (CourseMin > CheckMin || (typeof CourseMin === "undefined")) {
CourseMin = CheckMin;
CourseMinID = i;
}
var CheckMax = Math.max(c0[i], c1[i], c2[i]);
if (CourseMax < CheckMax || (typeof CourseMax === "undefined")) {
CourseMax = CheckMax;
CourseMaxID = parseInt(j);
}
var Avg = Math.avg(c0[i], c1[i], c2[i]);
if (Avg < CourseAvgMin || (typeof CourseAvgMin === "undefined")) {
CourseAvgMin = Avg;
CourseAvgMinID = j;
}
if (Avg > CourseAvgMax || (typeof CourseAvgMax === "undefined")) {
CourseAvgMax = Avg;
CourseAvgMaxID = parseInt(j);
}
}
console.log(CourseMaxID);
Wrapper.innerHTML += "<hr />";
Wrapper.innerHTML += "<span>The Course with lower grade have: " + NMap[CourseMinID] + ", Equals To " + CourseMin + "</span>";
Wrapper.innerHTML += "<span>The Course with higher grade have: " + NMap[CourseMaxID] + ", Equals To " + CourseMax + "</span>";
Wrapper.innerHTML += "<hr />";
Wrapper.innerHTML += "<span>The Course with lower average grade have: " + NMap[CourseAvgMinID] + ", Equals To " + CourseAvgMin + "</span>";
Wrapper.innerHTML += "<span>The Course with higher average grade have: " + NMap[CourseAvgMaxID] + ", Equals To " + CourseAvgMax + "</span>";
return null;
};
Math.avg = function () {
var Avg = 0;
var table = arguments;
for (var i = 0; i < table.length; i++) {
Avg += parseFloat(table[i]);
}
return parseFloat(Avg / table.length);
};
var-Course0=数组(6);
var Course1=数组(6);
var-Course2=数组(6);
var Student=Array(6);
var CMap=[Course0,Course1,Course2];
变量NMap=[“Course0”、“Course1”、“Course2”];
var showResults=函数(){
var Rows=document.getElementsByClassName(“srow”);
对于(变量i=1;iAvgMax)| |(AvgMax的类型==“未定义”)){
AvgMaxID=i;
AvgMax=Avg;
}
}
var Wrapper=document.getElementById(“学生结果”);
Wrapper.innerHTML=“”;
Wrapper.innerHTML++=“成绩较低的学生为:“+Student[MinID]+”,等于“+Min+”;
Wrapper.innerHTML+=“成绩较高的学生为:“+Student[MaxID]+”,等于“+Max+”;
Wrapper.innerHTML+=“
”;
Wrapper.innerHTML++=“平均成绩较低的学生为:“+Student[AvgMinID]+”,等于“+AvgMin+”;
Wrapper.innerHTML+=“平均成绩较高的学生为:“+Student[AvgMaxID]+”,等于“+AvgMax+”;
var CourseMin=CourseMinID=CourseMax=courseaxid=CourseAvgMin=CourseAvgMinID=CourseAvgMax=CourseAvgMaxID=0;
CourseMin=CourseMax=CourseAvgMin=CourseAvgMax=未定义;
对于(变量i=0,j=0;iCheckMin | |(CourseMin的类型==“未定义”)){
CourseMin=CheckMin;
CourseMinID=i;
}
var CheckMax=数学最大值(c0[i],c1[i],c2[i]);
if(CourseMaxCourseAvgMax | |(CourseAvgMax的类型==“未定义”)){
CourseAvgMax=平均值;
CourseAvgMaxID=parseInt(j);
}
}
console.log(CourseMaxID);
Wrapper.innerHTML+=“
”;
Wrapper.innerHTML++=“成绩较低的课程有:“+NMap[CourseMinID]+”,等于“+CourseMin+”;
Wrapper.innerHTML+=“成绩较高的课程有:“+NMap[CourseMaxID]+”,等于“+CourseMax+”;
Wrapper.innerHTML+=“
”;
Wrapper.innerHTML++=“平均成绩较低的课程有:“+NMap[CourseAvgMinID]+”,等于“+CourseAvgMin+”;
Wrapper.innerHTML++=“平均成绩较高的课程有:“+NMap[CourseAvgMaxID]+”,等于“+CourseAvgMax+”;
返回null;
};
Math.avg=函数(){
var平均值=0;
变量表=参数;
对于(变量i=0;i
在控制台中检查CourseMaxID和CourseMinID的输出后,CourseMinID的索引为3,但NMap只有3个值(索引为0、1、2)。所以我相信这就是为什么,例如,你看到:
“成绩较低的课程有:“+NMap[CourseMin]+”,等于“+CourseMin代码>未定义,因为索引超出了范围
以下是解决CourseMinID和CourseMaxID问题的方法:
将CourseMinID
的定义更改为Math.floor(j)-1代码>
将CourseMaxID
更改为等于Math.ceil(j)代码>
对浮点值调用parseInt()似乎没有达到预期的结果
我不完全确定为什么每次都选择将j增加0.5,但从观察中我注意到,对于CourseMax/CourseMinID,您希望使用我上面提到的计算
另一个注意事项是,对于课程平均值,您实际上是在输出学生的平均值。所以你需要改变你的逻辑。在我看来,您将水平行的等级作为平均值函数的参数:
var Avg = Math.avg(c0[i], c1[i], c2[i]);
这并不是你想要在课程平均成绩中解析的内容。我将定义另一个Avg函数(在这里我们称它为newAvg()
),它将单个数组(而不是多个参数)作为输入,然后调用Math.Min