我得到 java.lang.ArrayIndexOutOfBoundsException
I am getting java.lang.ArrayIndexOutOfBoundsException
我从这部分得到一个分数数组,这部分通过将每项评估的权重乘以每项评估的分数来计算总分。任何获得 -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);
}
替换你所有的
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
您正在使用 marks
迭代器迭代 assessments
数组,它们的长度可能不同。检查一下。
这 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];
如第一个答案中所述,您以这种方式使用 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];
}
我从这部分得到一个分数数组,这部分通过将每项评估的权重乘以每项评估的分数来计算总分。任何获得 -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);
}
替换你所有的
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
您正在使用 marks
迭代器迭代 assessments
数组,它们的长度可能不同。检查一下。
这 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];
如第一个答案中所述,您以这种方式使用 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];
}