#java
Вопрос:
Я пытаюсь прочитать данные из файла, которые мне нужно поместить в мой массив объектов. Когда я пытаюсь прочитать 6 тестов от одного студента, я получаю ошибку.
Я получаю эту ошибку,
Исключение в потоке «основной» java.lang.Исключение ArrayIndexOutOfBoundsException: Индекс 6 выходит за пределы длины 6
в example.example.readStudentList(пример.java:40)
в example.example.main(пример.java:57)
как я могу сделать так, чтобы я мог прочитать 6 тестов для каждого студента и не выйти за рамки?
public static Scanner openFile()throws IOException{ File input; Scanner inFile ; String fileName; System.out.print("Enter input file name and path if necessary: ");//e://csc121//data.txt fileName = KB.nextLine(); input = new File(fileName); if( ! input.exists()){ System.out.println("File does not exists. Check the file and try again"); System.exit(0); } inFile = new Scanner(input); // Step 1 Initialize loop condition if (! inFile.hasNext()){ System.out.println("Error. Data file has no data.n"); System.exit(0); } return inFile; } public static int readStudentList(Student[] stu)throws IOException{ int i = 0; Scanner inFile; String name; String id; float quiz; float[] tests = new float[6]; inFile = openFile(); while(inFile.hasNext()){ name = inFile.nextLine(); id = inFile.next(); for(int j = 0; i lt; 6; j ){ tests[j] = inFile.nextFloat(); } quiz = inFile.nextFloat(); inFile.nextLine(); stu[i] = new Student(name, id,tests,quiz); i ; } return i; } public static void main(String[] args)throws IOException { Student[] arr = new Student[50]; int size; size = readStudentList(arr); System.out.println(size); System.out.println(arr[0].name); System.out.println(arr[0].id); } } class Student { public String id; public String name; public float[] tests = new float[6]; public float quiz; Student(String name, String id, float[] tests, float quiz) { this.id = id; this.name = name; this.tests = tests; this.quiz = quiz; } }
Ответ №1:
Внимательно посмотрите на свой цикл for:
for(int j = 0; i lt; 6; j ){
Обратите внимание , что вы увеличиваете j
, но проверяете значение i
Ответ №2:
Вы использовали i
в своем if
заявлении вместо j
. Попробуйте сделать следующее:
public static int readStudentList(Student[] stu)throws IOException { int i = 0; Scanner inFile; String name; String id; float quiz; float[] tests = new float[6]; inFile = openFile(); while(inFile.hasNext()){ name = inFile.nextLine(); id = inFile.next(); for(int j = 0; j lt; 6; j ){ tests[j] = inFile.nextFloat(); } quiz = inFile.nextFloat(); inFile.nextLine(); stu[i] = new Student(name, id,tests,quiz); i ; } return i; }