2013-11-18 2 views
1

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

Вот что я в настоящее время:

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

public class P6 { 

    static String titlePie = "Pie Chart"; 
    static int numElements; 
    static String[] labels; 
    static double[] dataPieElements; 

    public static void main(String[] args){ 

     P6 p6 = new P6(); 
     p6.readFile(args[0]); 
     System.out.println(numElements); 
     System.out.println(Arrays.toString(dataPieElements)); 
     System.out.println(Arrays.toString(labels)); 
    } 

    private void readFile(String inputFile) { 
     try { 
      Scanner in = new Scanner(new File(inputFile)); 
      while (in.hasNext()){ 
       numElements=in.nextInt(); 
       if (in.hasNextDouble()){ 
        for (int i = 0; i<numElements; i++){ 
         dataPieElements[i]=in.nextDouble(); 
        } 
       } 
       else if (in.hasNext()){ 
        for (int i = 0; i<numElements; i++){ 
         labels[i]=in.next(); 
        } 
       } 
      } 
      in.close(); 
     } 
     catch (FileNotFoundException e){ 
      System.out.println("File not found"); 
     } 
    } 
} 

Входной файл выглядит следующим образом:

6 
Nokia 
Apple 
Google 
Samsung 
Apple 
Other 
14.2 
26.2 
13.1 
18.9 
11.3 
16.3 

Ошибка я получаю: Исключение в потоке «основной» java.lang .NullPointerException

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

Благодарим вас за любые предложения, которые могут возникнуть у вас!

ответ

1

Вы объявили свои массивы labels и dataPieElements, но вы не инициализировали эти массивы, поэтому они все еще null.

Инициализация их, когда вы знаете, сколько из них необходимо. После

numElements=in.nextInt(); 

тогда ...

labels = new String[numElements]; 
dataPieElements = new double[numElements]; 
+0

Это сделал это! Спасибо. – Smidem

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