我在使用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);
}
}
答案 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<>();
使用add
和get(index)
。
names.add(namesInFile.next());
和
System.out.println(names.get(i));