2015-10-03 8 views
0

Так вот вопрос:Как исправить NullPointerException в моем коде

Ваша программа должна иметь возможность считывать данные из файла вышеуказанных данных в массив и отсортировать массив по имени студента в восходящем заказ. Алгоритм выбора сортировки настоятельно рекомендуется для массива объектов. А также записывающее отделение хотело бы иметь отсортированный список классов для каждого класса, первокурсника, второкурсника, младшего и старшего.

Распечатайте следующее:

  1. Отсортированное мастер список со средним ГПД всего колледжа.
  2. Список первокурсников со средним показателем первоклассника.
  3. Список второкурсников со средним показателем степени риска для второкурсников.
  4. Юниорский список со средним уровнем баллов по возрасту среди юниоров.
  5. Старший список со средним уровнем баллов по возрасту пожилых людей.

До сих пор я не смог получить свой список для сортировки. Каждый раз, когда я пытаюсь скомпилировать, это дает мне исключение:

Exception in thread "main" java.lang.NullPointerException 
    at Project1.main(Project1.java:33) 

Вот мой код:

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 

public class Project1 { 
    public static void main(String[] args) throws IOException { 
     BufferedReader reader = 
      new BufferedReader(new FileReader("/Users/Ayesha/Desktop/inputfile.txt")); 
     ArrayList<String> list = new ArrayList<>(); 
     String data[] = new String[25]; 
     while (true) { 
      String line = reader.readLine(); 
      for (int i = 0; i < 24; i++) { 
       data[i] = line; 
      } 
      if (line == null) { 
       break; 
      } 
      System.out.println(line); 
      list.add(line); 
     } 

     // String data[]=list.toArray(new String[25]); 

     reader.close(); 

     for (int i = 0; i < data.length - 1; ++i) { 
      int minIndex = i; 
      for (int j = i + 1; j < data.length; ++j) { 
       if (data[j].compareTo(data[minIndex]) < 0) { 
        minIndex = j; 
       } 
      } 
      String temp = data[i]; 
      data[i] = data[minIndex]; 
      data[minIndex] = temp; 
     } 
     System.out.println(data); 
    } 
} 

Вот исходный файл:

NAME CLASS GPA 
Williams, Leonard Freshman 1.85 
Smith, Sheila Senior 2.99 
Anderson, Andy Sophomore 3.01 
Wiser, Bud Freshman 4.00 
Robertson, Jully Junior 2,78 
Koran, Korn Junior 3.50 
Smith, Sam Junior 2.14 
Johnson, Jim Junior 3.05 
Johnson, Jane Junior 3.75 
Potter, Pam Senior 2.98 
Brown, Bill Sophomore 2.55 
Crooks, Cathy Freshman 1.99 
Gregg, Howard Senior 2.44 
Nicholas, Judy Senior 3.69 
White, Bob Sophomore 1.64 
Walsh, Fred Junior 4.00 
Dennis, Susan Senior 2.06 
Roberts, Rachel Sophomore 4.00 
Fredericks, Mary Freshman 2.89 
Holmes, Wendy Senior 2.56 
Edwards, James Sophomore 3.00 
Green, Barbara Sophomore 3.67 
Brown, David Freshman 2.00 
Williamson, Walt Sophomore 2.95 
Carson, Jim Sophomore 2.03 
+1

Сомневаюсь, что вы получаете исключение во время компиляции - вы имели в виду исполнение? Какое исключение? Не могли бы вы разместить stacktrace? – Kenney

+0

Не могли бы вы предоставить образцы вашего входного файла? –

+0

Можете ли вы изменить свой вопрос и включить точное исключение, которое вы получаете? Поскольку вы говорите «когда я пытаюсь скомпилировать», компилятор дает вам ошибку или вы действительно получаете исключение во время выполнения? – bgse

ответ

-1

Это улучшен код вашего решения,

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 

public class Project1 { 
    public static void main(String[] args) throws IOException { 

     BufferedReader reader = new BufferedReader(new FileReader("/Users/Ayesha/Desktop/inputfile.txt")); 
     ArrayList<String> list = new ArrayList<String>(); 
     while (true) { 
      String line = reader.readLine(); 
      if (line == null) { 
       break; 
      } 
      System.out.println(line); 
      list.add(line); 
     } 

     String data[] = list.toArray(new String[list.size()]); 

     reader.close(); 

     for (int i = 0; i < data.length - 1; ++i) { 
      int minIndex = i; 
      for (int j = i + 1; j < data.length; ++j) { 
       if (data[j].compareTo(data[minIndex]) < 0) { 
        minIndex = j; 
       } 
      } 
      String temp = data[i]; 
      data[i] = data[minIndex]; 
      data[minIndex] = temp; 
     } 

     // This is how you get each gpa for each line. 
     for (int i = 0; i < data.length; i++) { 
      String[] words = data[i].split(" "); 
      String gpa = words[3]; 
      System.out.println(gpa); 
     } 

    } 
} 
+1

Не могли бы вы быть более подробными с комментариями здесь? Ответчик, по-видимому, пытается решить вопрос для школы или колледжа, и это не помогает им, если они не понимают, что происходит. – bgse

+0

Спасибо! Ты буквально спас мне жизнь! Можете ли вы объяснить вещь gpa? я действительно не понимаю, что там происходит. –

+0

Привет, Ayesha, так как для одной строки у вас есть 4 слова. Просто я разделил одну строку с символом «пробел». Это даст вам 4 слова. Четвёртым из слов будет оценка GPA, которую вы хотите. –

0
while (true) { 
     String line = reader.readLine(); 
     for(int i=0; i<24; i++){ 
      data[i]= line; 
     } 
     if (line == null) { 
      break; 
     } 
     System.out.println(line); 
     list.add(line); 
    } 

в этом фрагменте кода, вы на самом деле читает строку из файла и вставить ту же самую строку в все 24 из ваших 25 слотов String data[]= new String[25];. Это может быть ошибка; вы должны попросить for loop работать, пока он меньше 25.

Что еще более важно, вы хотели прочитать одну строку и вставить одну строку в один набор данных, а затем перейти к следующему. Потому что для файла, который может не содержать достаточных строк, предположим, что он имеет только 7 строк. Когда вы читаете строку 8, которую ваш filereader переводит как null, все строки в data[] будут иметь значение null.

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