2015-11-05 3 views
1

Привет, спасибо, что нашли время ответить на этот вопрос. Я работаю над назначением, где мне нужно читать имена и оценки из txt-файла в массивы с помощью сканера. Я не могу использовать arrayList (о, насколько это было бы проще). Во всяком случае, я продолжаю тянуть линию, не обнаружив ошибок. Что мне не хватает. считываемых данных в отформатирован как таковой:Ошибка при обнаружении ошибки при чтении из файла в Array

Puckett, Karen 
10 10 9.5 10 10 8 9.5 10 10 10 9 10 10 10 0 
4 3 5 3 5 2 3 2 1.5 1 5 3.5 
17.5 24 22 23.5 22 23 
90 91 
96 

код начинается здесь

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.util.Scanner; 

/** 
* 
* @author Cade 
*/ 
public class CS1180Project04McLarty { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) throws FileNotFoundException { 
     int studentCount = 16; 
     int LabCount = 16; 
     int quizCount = 12; 

     double [] projectGrades; 
     double [] examGrades; 
     double [] finalsGrade; 
     double [] labGrades = new double[LabCount]; 
     double [] quizGrades = new double [quizCount]; 
     String [] names = new String[studentCount]; 

     File doc = new File("scores.txt"); 
     Scanner fin = new Scanner(doc); 

     names = fileReaderNames(studentCount ,doc, fin); 

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


    /** 
    * reads in names only 
    * @param studentCount int count of students set to 16 in main 
    * @param doc file being read 
    * @param fin scanner 
    * @return complete Array of the names 
    */ 
    private static String[] fileReaderNames(int studentCount, File doc, Scanner fin) { 
     int count = 0; 
     String [] names = new String[studentCount]; 
     while (fin.hasNext()) { 
      names[count] = fin.nextLine(); 
      fin.nextLine(); 
      fin.nextLine(); 
      fin.nextLine(); 
      fin.nextLine(); 
      fin.nextLine(); 
      count++; 
     } 
     fin.close(); 
     return names; 
    } 
} 
+3

внутри 'while (fin.hasNext())' почему вы используете 5 'nextLine()'? –

+0

Q отредактирован для отображения формата –

+0

Вы проверяете, есть ли еще одна строка для чтения: fin.hasNext(), а затем читать 6 строк. Но вам всегда нужно проверить, прежде чем читать строку. –

ответ

1

Ваш код ожидает имена следуют 5 строк (я предполагаю, что некоторые другие данные), но из-за того, что вы только проверить каждую 6-ю строку. Если какая-либо другая строка отсутствует (это означает, что общее количество строк не будет кратным 6 по любой причине), это не удастся.

+0

Спасибо, я вернулся, чтобы посмотреть файл, и я пропустил 1 часть данных, в результате чего список заменил не более шести и он работает как следует. –

Смежные вопросы