2016-03-23 4 views
-1

У меня есть ошибка исключения нулевого указателя в нижнем коде.Исключение нулевого указателя

Exception in thread "main" java.lang.NullPointerException 
at BookTest.createInstances(BookTest.java:53) 
at BookTest.main(BookTest.java:20) 

Я действительно мог бы использовать какую-то помощь, и это было довольно долгое время.

import java.io.*; 
import java.io.FileNotFoundException; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Formatter; 
import java.util.Scanner; 

import javax.swing.JOptionPane; 

public class BookTest 
{ 


public static void main (String[] args){ 

ArrayList list = createInstances(); 
writeFile(list); 
} 


public static ArrayList<Book> createInstances() 
{ 
ArrayList<Book> bookArray = new ArrayList<Book>(); 
String inputArray[] = new String [10]; 
int i = 0; 
Scanner input; 

    // Read the text file and stores into inputArray where each line is stored as String. 
try 
{ 
    input = new Scanner(new File("book.txt")); 
    input.useDelimiter("\n"); 
    while (input.hasNext()){ 
     inputArray[i]=input.next(); 
     i++; 
    } 





    // dataArray defines the two dimensional array that store all the values in the line. 
    String dataArray [] [] = new String [10] [11]; 

    System.out.println(inputArray.length); 
    for (int k =0; k<inputArray.length; k++){ 

     String getLine = inputArray[k]; 
     String[] eachLine =getLine.split(" "); 
     int length = eachLine.length; 


      for (int j=0; j<length;j++){ 
      dataArray [k][j]= eachLine[j]; 
     } 
    } 



    for (int l = 0; l < 10; l++) 
     { 
      if (dataArray[l][0].equals("Fiction")) 
      { 
       Publisher p = new Publisher(dataArray[l][3], dataArray[l][4]); 
       bookArray.add(new Fiction(dataArray[l][1], dataArray[l][2], dataArray[l][5], 
       p, Double.parseDouble(dataArray[l][6]), dataArray[l][7], l)); 
      } 

      else 
      { 
       Publisher p = new Publisher(dataArray[l][3], dataArray[l][4]); 
       bookArray.add(new NonFiction(dataArray[l][1], dataArray[l][2],dataArray[l][5], 
       p, Double.parseDouble(dataArray[l][6]), dataArray[l][7], l)); 
      } 
     } 

} 

catch (FileNotFoundException e) { 

    e.printStackTrace(); 
} 
return bookArray; 
} 


public static void writeFile(ArrayList arrayOfBook) 

{ 
Formatter output ; 

try 

{ 
    output = new Formatter("book.txt"); 
      for(int i = 0; i<11;i++) 
      { 
       output.format("%s %s %s %s %s %s %s %s %s %s %s \n", arrayOfBook.get(i)); 
      } 
    }  
catch (IOException e) 

{ 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 

    } 
    } 

это файл им пытаются читать

фантастика AbrahamLincolnVampireHunter Грэма-Смита Wiley NY 978-0446563079 13,99 222 истинный 12 1/1/2015

фантастика Франкенштейн Shelley Prescott GA 978-0486282114 7.99 321 правда 8 5/12/2008

LifeofKennedy Джонс Научно-популярная литература Пирсона MT 758-29304566 12.90 биография 3 11/11/2011

+0

Вы уверены, что присваиваете значение каждому элементу 'inputArray'? – fabian

+0

И вот я, работая над подробным ответом, просто заметил, что этот вопрос был закрыт, прежде чем я захочу опубликовать свой ответ. – mezzodrinker

ответ

1

Вы объявили свой входной массив как массив длиной 10 (что может быть не самая лучшая идея, если вы не можете гарантировать, что файл содержит точно 10 строк), что означает, что остальные элементы (для которых в файле не было строки) остаются в нуле, и вы используете null.split (""), что приводит к исключению. Либо убедитесь, что у вас ровно 10 строк, либо используйте динамическую структуру данных (например, ArrayList<String>).

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