2014-09-28 2 views
-1

я следующую маленькую проблему ... У меня есть этот код, использующий метод OpenFile() одного класса ReadData читать .txt файл, а также у меня есть еще один класс ArraysTZones используется для создания объекта, который хранит 3 массивы (data1, data2, data3) и 3 целые числа (total1, total2, total3), возвращаемые методом OpenFile(). Проблема в том, что когда я пытаюсь отобразить каждый массив (data1, data2, data3), используя метод getArray() из ArrayTZones, он останавливается и отображает ошибку NullPointerException. Кто-нибудь знает, как я могу это исправить?Массив бросает NullPointerException в Java

public static void main (String args[]) throws IOException { 
    String fileName = ".//data.txt"; 
    int[] def = new int[180]; 
    try { 

     ReadData file = new ReadData(fileName); 
     ArraysTZones summaryatz = new ArraysTZones(); 
     summaryatz = file.OpenFile(); 

     for (int i = 0; i < 180; i++) 
      System.out.print (summaryatz.getArray1()[i] + " "); 
     System.out.println (""); 
     System.out.println (summaryatz.getTotal1()); 

     for (int i = 0; i < 180; i++) 
      System.out.print (summaryatz.getArray2()[i] + " "); 
     System.out.println (""); 
     System.out.println (summaryatz.getTotal2()); 

     for (int i = 0; i < 180; i++) 
      System.out.print (summaryatz.getArray3()[i] + " "); 
     System.out.println (""); 
     System.out.println (summaryatz.getTotal3()); 
    } 
    catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 
} 

Heres OpenFile()

public ArraysTZones OpenFile() throws IOException { 
    FileReader reader = new FileReader(path); 
    BufferedReader textReader = new BufferedReader(reader); 
    int numberOfTimeZones = 3; 
    int[] data1 = new int[180]; 
    int[] data2 = new int[180]; 
    int[] data3 = new int[180]; 
    int total1 = 0; 
    int total2 = 0; 
    int total3 = 0; 
    ArraysTZones atz = new ArraysTZones(); 

    for (int i = 0; i < numberOfTimeZones; i++){ 
     if (i == 0) { 
      String firstTimeZone = textReader.readLine(); 

      String[] val = firstTimeZone.split ("\\s+"); 
      for (int u = 0; u < val.length; u++) 
      { 
       int stats = (int)(Math.ceil(Math.abs(Double.parseDouble(val[u])))); 
       total1 += stats; 
       data1[u] = stats; 
      } 
      total1= total1/180; 
      atz.setTotal1(total1); 
      atz.setArray1(data1); 
     } 
     else 
     if (i == 1) { 
      String secondTimeZone = textReader.readLine(); 
      String[] val = secondTimeZone.split ("\\s+"); 
      for (int u = 0; u < val.length; u++) 
      { 
       int stats = (int)(Math.ceil(Math.abs(Double.parseDouble(val[u])))); 
       total2 += stats; 
       data2[u] = stats; 
      } 
      total2= total2/180; 
      atz.setTotal2(total2); 
      atz.setArray2(data2); 
     } 
     else { 
      String thirdTimeZone = textReader.readLine(); 
      String[] val = thirdTimeZone.split ("\\s+"); 
      for (int u = 0; u < val.length; u++) 
      { 
       int stats = (int)(Math.ceil(Math.abs(Double.parseDouble(val[u])))); 
       total3 += stats; 
       data3[u] = stats; 
      } 
      total3= total3/180; 
      atz.setTotal3(total3); 
      atz.setArray3(data3); 
     } 
    } 
    textReader.close(); 
    return atz; 
} 

GetArray()

public int[] getArray1() { 
    return data1; 
} 

И setArray()

public void setArray1 (int[] farray) { 
    int[] data1 = new int[180]; 
    //int[] farray = new int[180]; 
    data1 = farray; 
} 
+1

Не смотря на остальную часть вашего кода, для 'getArray()' и, возможно, ваших 'OpenFile()' методов/классов, мы можем только рассуждать о причине. Также было бы полезно исключение, так как это должно точно указать, где именно возникает проблема. –

+0

Мое предположение заключается в том, что методы 'getArray_' возвращают' null'. – khelwood

+2

попробуйте отладить ваш код. вы увидите, какая переменная имеет значение null. и при отладке не используйте возвращенный массив напрямую, как в вашем коде summaryatz.getArray1() [i]. используйте его следующим образом: for (...) {int arr [] = summaryatz.getArray1(); System.out.println (обр [я]); } – Adem

ответ

1

Проблема, кажется, здесь

public void setArray1 (int[] farray) 
{ 
    int[] data1 = new int[180]; 
    //int[] farray = new int[180]; 
    data1 = farray; 
} 

Вы объявляя новую переменную с именем data1 и сохранение содержимого farray к нему. После этого метода эта переменная будет удалена из-за его объема.

Удалить int[] из строки int[] data1 = new int[180]; (или просто удалить всю строку .. это необязательно), и ваши данные будут сохранены в правильной переменной, которая была объявлена ​​для класса.

public void setArray1 (int[] farray) { 
    data1 = farray; 
} 
+1

Предполагая, что существует переменная класса класса, называемая 'data1' причины –

+0

http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it – xenteros

+0

@xenteros Как и на другом ответе: его нельзя удалить, поскольку он уже принят (по крайней мере, я могу Не удаляй его сам). Кроме того, есть намного лучшие дубликаты для вопросов о проблемах с затенением, например: http://stackoverflow.com/questions/30021160/nullpointerexception-java – Tom

0

Вы должны инициализировать ArraysTZones

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