java中数组越界异常的获取

tjvv9vkg  于 2021-07-08  发布在  Java
关注(0)|答案(3)|浏览(354)

这个问题在这里已经有答案了

是什么导致java.lang.arrayindexoutofboundsexception以及如何防止它(26个答案)
上个月关门了。
嘿,伙计们,我不知道如何修复下面的代码,因为我得到一个区域出界异常,每次我运行它任何帮助将非常感谢修复这个thx。

int numberStudents = numberOfStudents();  
    System.out.println("");
    int[] gradeOfStudent = gradeOfStudents(numberStudents);

方法如下

public static int[] gradeOfStudents(int numberStudents) {
    Scanner input = new Scanner (System.in);
    int[] grades = new int [numberStudents];
    String[] name = new String[numberStudents];
    for(int i = 0; i < numberStudents;) {
        for(int j = 0; j < numberStudents; i++ ) {
            System.out.print("Enter the name of the " + (i + 1) + " student: ");
        name[i] = input.next();
            System.out.print("Enter the " + (i + 1) + " student's grade: " );
        grades[i] = input.nextInt();              
        }
    } 
    return grades;
}
yi0zb3m4

yi0zb3m41#

问题出在你的问题上 gradeOfStudents() 方法。你有2个 for 循环。

for(int i = 0; i < numberStudents;) {
    for(int j = 0; j < numberStudents; i++ ) {

你的第一个循环 numberOfStudents 次,第二个循环也运行 numberOfStudents 次。
真正的问题是,你知道 i++ 对于每个迭代。所以你增加了 inumberOfStudents * 2 . 但是你的数组只有一个大小 numberOfStudents .
实际上,第二个循环没有意义,因为您不需要而且显然也不使用 j . 一个循环就足够完成这个任务了。固定的代码段如下所示:

public static int[] gradeOfStudents(int numberStudents) {
    Scanner input = new Scanner (System.in);
    int[] grades = new int [numberStudents];
    String[] name = new String[numberStudents];
    for(int i = 0; i < numberStudents; i++) {
        System.out.print("Enter the name of the " + (i + 1) + " student: ");
        name[i] = input.next();
            System.out.print("Enter the " + (i + 1) + " student's grade: " );
        grades[i] = input.nextInt();              
    }
    return grades;
}

但是通过这种方法,您可以看到实际上您放弃了 name 完全阵列。我想你不想那样。
所以更面向对象的方法是,创建一个类 Student ,然后保存属性 grade 以及 name .
比如说:

class Student {

    private int grade;
    private String name;

    public Student(int grade, String name) {
        this.grade = grade;
        this.name = name;
    }

    // then provide getters and setters for the attributes

}

然后创建并存储 new Student(grade, name) 你的每一个输入。

lmvvr0a8

lmvvr0a82#

移除j for循环,并将i++(增量i)添加到第一个for循环

public static int[] gradeOfStudents(int numberStudents) {
Scanner input = new Scanner (System.in);
int[] grades = new int [numberStudents];
String[] name = new String[numberStudents];
for(int i = 0; i < numberStudents; i++) {
    System.out.println("Enter the name of the " + (i + 1) + " student: ");
    name[i] = input.next();
    System.out.println("Enter the " + (i + 1) + " student's grade: " );
    grades[i] = input.nextInt();              
} 
return grades;

}

2nbm6dog

2nbm6dog3#

在gradeofstudents(int)方法中有第二个循环:

for(int j = 0; j < numberStudents; i++ ) {

如您所见,循环变量是'j',但它会在每个循环后更新'i',因此第一个循环中的i<numberstudents检查不再为每个'i'调用->它可能超出界限。
您似乎也没有使用“j”表示任何东西,整个循环可能是多余的。

相关问题