Witam,
od jakiegoś czasu uczę się programować w Javie.
Piszę program, który ma odczytać obraz pgm, jakoś go przerobić i zapisać.
Zrobiłem sobie klasę Obraz:
class Obraz
{
private String magicNumber;
private String comment;
private int Xres;
private int Yres;
private int maxValue;
private int[][] pixels = new int[Yres][Xres];
public Obraz(Scanner plik)
{
magicNumber = plik.nextLine();
comment = plik.nextLine();
Xres = plik.nextInt();
Yres = plik.nextInt();
maxValue = plik.nextInt();
for(int i=0; i<Yres; i++)
{
for(int j=0; j<Xres; j++)
{
pixels[i][j] = plik.nextInt();
}
}
//System.out.println(magicNumber + "..." + comment + "..." + Xres + "..." + Yres + "..." + maxValue);
}
public void negatyw()
{
for(int i=0; i<Yres; i++)
{
for(int j=0; j<Xres; j++)
{
pixels[i][j] = maxValue - pixels[i][j];
}
}
}
public void zapisz(PrintWriter OUT)
{
OUT.println(magicNumber);
OUT.println(comment);
OUT.print(Xres);
OUT.print(Yres);
OUT.print(maxValue);
for(int i=0; i<Yres; i++)
{
for(int j=0; j<Xres; j++)
{
OUT.print(pixels[i][j]);
}
}
}
}
Wedle mojego zamysłu, tworząc obiekt odczytuje z pliku podanego w argumencie wszystkie dane i zapisuje pola obiektu.
No i działa to dobrze z polami początkowymi (rozdzielczość, komentarz itd.) Niestety zapis tablicy pixels już nie działa i wywala mi błąd:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Obraz.<init>(PrzetwarzanieObrazow.java:91)
at PrzetwarzanieObrazow.main(PrzetwarzanieObrazow.java:41)
Wnioskuję, że gdzieś sięgam poza granice tablicy, ale nie wiem jak i gdzie:/
Wie ktoś jak na to zaradzić?
Chyba wiem gdzie jest źle.
Kiedy tworzę obiekt, konstruktor próbuje zapisać coś do tablicy. A tablica ta tak naprawdę nie ma rozmiaru X na Y. Problem w tym, że nie mam pojęcia jaki tak naprawdę ma rozmiar i jak to zrobić tak, żeby jej rozmiar był ustalany dopiero po ustalenia Xres i Yres.