Java中的ArrayIndexOutOfBoundsException问题

时间:2018-07-29 00:30:39

标签: java arrays

我在使用Java数组时遇到了一些麻烦,希望获得一些帮助。我正在尝试制作一个程序,该程序将从3个文件中获取信息-一个文件包含学生的姓氏,一个文件包含其gpa,另一个文件包含其学生号。但是,当我运行该程序时,得到的ArrayIndexOutOfBoundsException为:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    at Final.loadArrays(Final.java:40)
    at Final.main(Final.java:25)

我确保文件中包含数据且没有其他空格/等。请在下面找到我的代码,并感谢您的帮助。

import java.util.Scanner;
import java.io.FileNotFoundException;
import java.io.FileReader;
import javax.swing.JOptionPane;

public class studentinfo
{

public static void main(String [] args) throws FileNotFoundException

{
final int MAX_SIZE = 3;
String[] names = new String[MAX_SIZE];
double[] gpa = new double[MAX_SIZE];
int[] studentNumber = new int[MAX_SIZE];

loadArrays(names, gpa, studentNumber);

}
public static void loadArrays(String[] names, double[] gpa, int[] studentNumber) throws FileNotFoundException

{
    Scanner namesInFile = new Scanner(new FileReader ("names.txt"));
    Scanner gpaInFile = new Scanner(new FileReader ("gpa.txt"));
    Scanner studentNumberInFile = new Scanner(new FileReader ("studentNumber.txt"));

    int i = 0;
    //loop for loading names array
    while(namesInFile.hasNext())

    {
        names[i] = namesInFile.next();
        i++;

    }

    i = 0;
    //loop for loading gpa array
    while (gpaInFile.hasNext())
    {
        gpa[i] = gpaInFile.nextDouble();
        i++;

    }
    i = 0;
    //loop for loading student number array
    while (studentNumberInFile.hasNext())
    {
        studentNumber[i] = studentNumberInFile.nextInt();
        i++;

    }


    namesInFile.close();
    gpaInFile.close();
    studentNumberInFile.close();


    for(i = 0; i < names.length ; i++)
            System.out.println(names[i]);

    for(i = 0; i < gpa.length ; i++)
            System.out.println(gpa[i]);

    for(i = 0; i < studentNumber.length ; i++)
            System.out.println(studentNumber[i]);
        String message = "";
    for(i = 0; i < gpa.length ; i++)
            message += studentNumber[i]+" "+names[i]+" "+gpa[i]+"\n";

        JOptionPane.showMessageDialog(null, message);
}

}

2 个答案:

答案 0 :(得分:0)

您将顶部的最大尺寸声明为

final int MAX_SIZE = 3;

您需要确保文档中的内容数少于MAX_SIZE,否则将出现此异常。

答案 1 :(得分:0)

3是您的文件号,而不是文件中的学生人数。不要使用数组,因为您不知道实际的数字,请改用List

import java.util.ArrayList;

将数组更改为数组列表。

ArrayList<String> names = new ArrayList<>();
ArrayList<Double> gpa = new ArrayList<>();
ArrayList<Integer> studentNumber = new ArrayList<>();

使用addget(index)

names.add(namesInFile.next());

System.out.println(names.get(i));