我将从本节中获得一个不完整的分数阵列,本节通过将每个评估的权重乘以每个评估的分数来计算总分数。任何获得-1的标记将自动设置为0,并且不计算在内。
public double totalMark(){
int [] assessments = {2,2,2,2,1,1,1,1,2,2,1,3,70}; //Weight of each assessment
int totalMark = 0;
int overallmark = 0;
for (int i : marks) //marks of each assignment
if (marks[i] == -1) {
assessments[i] = 0;
}
for (int i : marks) {
totalMark =+ assessments[i] * marks[i];
}
for (int i : assessments) {
overallmark =+ assessments[i];
}
return totalMark/overallmark;
}
这是我的主要方法:
public static void main(String args[]) {
int[] samsMarks = {50, 60, 65, 60, 65, 70, 55, 66, 60, 73, 65, 45, 68, 54};
int[] billysMarks = {50, 60, -1, 60, 65, 70, 55, 66, 60, 73, 65, 45, 68, 54};
Student sam = new Student("1111111", samsMarks);
Student billy = new Student("1111112", billysMarks);
System.out.println(billy.totalMark);
}
答案 0 :(得分:3)
替换所有
for (int i : marks)
使用
for (int i = 0; i < marks.length; i++)
和
for (int i : assessments)
使用
for (int i = 0; i < assessments.length; i++)
使用时
for (int i : marks)
i
不是marks
的索引,而是marks
包含的元素:
50, 60, 65, 60, 65, 70, 55, 66, 60, 73, 65, 45, 68, 54
答案 1 :(得分:0)
如第一个答案中所述,您以这种方式使用for:
for(element : list)
但是由于您需要索引,因此应以以下格式使用它
for(initialization; termination; increment)
这也是对代码的建议,而不是对元素进行3次循环,我建议您在一次迭代中进行此操作,并且您的代码可以如下所示(因为标记和分配的元素数相同)>
for (int i = 0; i < marks.length; i++) {
if (marks[i] == -1) {
assessments[i] = 0;
}
totalMark =+ assessments[i] * marks[i];
overallMark =+ assessments[i];
}
答案 2 :(得分:-1)
您正在使用assessments
迭代器迭代marks
数组,它们的长度可能不相同。检查一下。
这2个循环非常成问题(都在访问assessments
,并且只担心marks
的长度:
for (int i : marks) //First problematic loop
if (marks[i] == -1) {
assessments[i] = 0;
}
for (int i : marks) { //Second problematic loop
totalMark =+ assessments[i] * marks[i];