java中如何从嵌套循环的数组中读取值

java中如何从嵌套循环的数组中读取值,java,arrays,Java,Arrays,我的目标是计算参加多个科目考试的几个学生的分数。学生记录将存储在一个数组中。 请在下面找到我的代码: 打印学生记录时,我能够打印外部for循环中的所有记录,但无法打印主题(内部for循环中)。我收到错误“arrayoutofindex” 包分配; 导入java.util.ArrayList; 导入java.util.Scanner; /** * *@作者管理员 */ 公共课堂作业{ //字符串名; 整数整数; 串姓; 字符串名; int studNo; 字符串主题; 赋值(字符串姓氏、字符串名、

我的目标是计算参加多个科目考试的几个学生的分数。学生记录将存储在一个数组中。 请在下面找到我的代码: 打印学生记录时,我能够打印外部for循环中的所有记录,但无法打印主题(内部for循环中)。我收到错误“arrayoutofindex”

包分配;
导入java.util.ArrayList;
导入java.util.Scanner;
/**
*
*@作者管理员
*/
公共课堂作业{
//字符串名;
整数整数;
串姓;
字符串名;
int studNo;
字符串主题;
赋值(字符串姓氏、字符串名、int studNo、字符串主题){
//this.name=name;
//这个.totalMarks=totalMarks;
this.firstname=firstname;
this.姓氏=姓氏;
this.studNo=studNo;
this.subject=主语;
}
//公共字符串getName(){
//返回名称;
// }
公共字符串getSName(){
返回姓氏;
}
公共字符串getFName(){
返回名字;
}
公共整数getTotalMarks(){
返回总分;
}
public int getStudNo(){
返回studNo;
}
公共字符串getSubject(){
返回主题;
}
公共静态布尔值validSubject(字符串子对象){
返回子匹配项(“[1-5]”);
}
公共静态void main(字符串[]args){
ArrayList=新建ArrayList();
ArrayList l=新的ArrayList();
//布尔值validSub=false;
整数倍;
//int numTimes=1;
//int sub=0;
//整数倍;
字符串[]subs;
字符串sub=“”;
扫描仪输入=新扫描仪(System.in);
System.out.print(“班上有多少学生?:”;
int sNo=input.nextInt();
int count[]=新的int[sNo];
字符串[]fname=新字符串[sNo];
字符串[]sname=新字符串[sNo];
int[]螺柱编号=新的int[sNo];
//整数标记[]=新整数[sNo];
for(int i=0;i最高)
//最高=分数[i];
//else if(标记[i]<最低)
//最低=分数[i];
// }
对于(作业a:列表){
//if(a.getTotalMarks()==最高){
//System.out.println(a.getFName()+“获得最高分数”);
// }
//if(a.getTotalMarks()==最低){
//System.out.println(a.getFName()+“获得最低分数”);
// }
System.out.println(a.getFName()+“”+a.getSName());
System.out.println(“学号:+a.getStudNo());
System.out.println(“主题:+a.getSubject());
System.out.println(“=======================================================”);
//System.out.println(subs[次]);
}
}
}
您有

             subs[times] = sub;
             subj[times]++;

在您的内部循环中,条件为(times=0;times我猜,
subs[times]=sub;
应该是
sub[times]=sub;
我运行了您的代码,错误是

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
    at Assignment.main(Assignment.java:113)
那么,在这方面发生了什么

list.add(new Assignment(sname[i],fname[i],stud_No[i],subs[times + 1]));
通过这种方式,您可以跟踪错误来自sname、fname、stud_No或SUB访问超出其范围的内容。
现在,您可以修改该行并重新运行,以了解发生了什么。

ArrayOutOfBoundException将发生在第行
list.add(新赋值(sname[i]、fname[i]、stud_No[i]、subs[times+1])
因为时间已经增加到subs.length,它等于subs.length,所以这里的条件适用

list.add(new Assignment(sname[i],fname[i],stud_No[i],subs[times + 1]));