Ogarniam dopiero zapis i odczyt z pliku i mam pewną koncepcję programu i najpierw chciałem przetestować samo działanie na plikach i według tego co wyczytałem poniższy kod powinien działać:
package javaapplication34;
import java.io.*;
class Przedmioty {
private String przedmiot, nauczyciel;
private int[][] oceny;
private double srednia;
private int ilosc_ocen;
public void nadaj(String q, String w,double e, int r, int[][] t){
przedmiot = q;
nauczyciel = w;
srednia = e;
ilosc_ocen = r;
oceny = new int[t.length][1];
for(int i=0;i<oceny.length;i++){
oceny[i][0] = t[i][0];
oceny[i][1] = t[i][1];
}
}
public String zwroc_przedmiot(){
return przedmiot;
}
public String zwroc_nauczyciela(){
return nauczyciel;
}
public double zwroc_srednia(){
return srednia;
}
public int zwroc_ilosc_ocen(){
return ilosc_ocen;
}
public int zwroc_ocene(int j, int k){
return oceny[j][k];
}
}
public class Main {
static Integer ilosc_przedmiotow = new Integer(4);
public static void main(String[] args) throws IOException {
Przedmioty[] przedmioty;
przedmioty = new Przedmioty[ilosc_przedmiotow];
ilosc_przedmiotow = new Integer(przedmioty.length);
int[][] cyferki = {
{4,2},{3,1},{5,3}
};
for(int i=0; i<przedmioty.length;i++){
przedmioty[i].nadaj("Polski", "Nowak", 4.2, 3, cyferki);
}
FileWriter fw = new FileWriter("plik.txt");
FileReader fr = new FileReader("plik.txt");
BufferedReader br = new BufferedReader(fr);
fw.write(ilosc_przedmiotow.toString()+"\n");
for(int i=0; i<przedmioty.length;i++){
fw.write(przedmioty[i].zwroc_przedmiot()+"\n");
fw.write(przedmioty[i].zwroc_nauczyciela()+"\n");
fw.write(Double.toString(przedmioty[i].zwroc_srednia())+"\n");
fw.write(Integer.toString(przedmioty[i].zwroc_ilosc_ocen())+"\n");
for(int j=0;j<przedmioty[i].zwroc_ilosc_ocen();j++){
fw.write(przedmioty[i].zwroc_ocene(j, 0)+"\n");
fw.write(przedmioty[i].zwroc_ocene(j, 1)+"\n");
}
}
fw.close();
String s;
while((s = br.readLine()) != null)
{
System.out.println(s);
}
}
}
W linii: przedmioty[i].nadaj("Polski", "Nowak", 4.2, 3, cyferki); wyrzuca wyjątek: java.lang.NullPointerException. Już miałem to samo wcześniej gdy przypisywałem dwie tablice oceny = t; ale gdy dodałem funkcję "nadaj()" gdzie przypisuję po kolei wartości z komórek tabeli 'oceny' do komórek 't' nadal wyrzuca ten wyjątek. Domyślam się, że związane jest to z tym, że rozmiar tabeli jest podawany dopiero po uruchomieniu programu ale tak w zamyśle musi być, bo każdy użytkownik może mieć inne dane, lecz nie wiem w którym miejscu jest błąd.
Dałem tą linijkę w komentarz by zobaczyć co się stanie i ten sam wyjątek pokazało w linii: fw.write(przedmioty[i].zwroc_przedmiot()+"\n");
Proszę o pomoc.