Skocz do zawartości
Tirador

[Java] java.lang.NullPointerException

Rekomendowane odpowiedzi

Witam. Piszę program w Javie i mam do rozwiązania taki problem:

 

class Main

{

public static Budynek tablica[];

//...

 

static void WypiszElementyTab()

{

System.out.println(tablica[0].metodaKlasyBudynek());

}

//...

 

public static void main(String args[])

{

 

// tutaj zapisuję po kolei obiekty klasy Budynek do tablicy

 

WypiszElementyTab();

 

//...

}

}

 

I gdy przychodzi do wywołania metody WypiszElementyTab(), wyskakuje mi błąd "java.lang.NullPointerException". Jak temu zaradzić? Mam nadzieję, że dobrze opisałem Wam ten fragment programu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

...CIACH...

I gdy przychodzi do wywołania metody WypiszElementyTab(), wyskakuje mi błąd "java.lang.NullPointerException". Jak temu zaradzić? Mam nadzieję, że dobrze opisałem Wam ten fragment programu.

Jakby nie patrzec public static Budynek tablica[]; nie zostało nigdzie zainicjalizowane (czyli domyslnie otrzymuje wartosc null).

W zwiazku z tym, gdy w WypiszElementyTab() wywolujesz

System.out.println(tablica[0].metodaKlasyBudynek());

probujesz na wartosci null odpalic metode klasy budynek.

 

null.metodaKlasyBudynek() <- jakby nie patrzec NullPointer poleci

 

zrob po prostu cos takiego

static void WypiszElementyTab() {     if (tablica == null )     {       return;    }    for (int i=0, max=tablica.length; i<max; i++)    {        System.out.println(tablica[i].metodaKlasyBudynek());    }     }

1 if zalatwi sprawe NullPointera a reszta wywola sie po calej tablicy elementow.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dzięki. Ale to tylko w połowie rozwiązuje mój problem. Bo ja chciałem, by ta funkcja wypisała mi elementy tablicy. Napisałem w poście, że w public static void main do tablicy zapisywane są elementy. Mam wyraźnie powiedziane, że mam wyświetlić jej elementy za pomocą osobnej metody. Bo jak tą pętelkę for wstawiam do maina, to wszystko działa bez zarzutu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

...  to tylko w połowie rozwiązuje mój problem. Bo ja chciałem, by ta funkcja wypisała mi elementy tablicy.

WypiszElementyTab() wypisuje elementy tej tablicy. (przejscie po tablicy w for)

 

Napisałem w poście, że w public static void main do tablicy zapisywane są elementy. 

Jesli sa zapisywane to nie powinienes dostac NullPointera, chyba ze wpakujesz null jako element tablicy.

Wtedy wystarczy do petli, wypisujacej przed wypisaniem elementu dodac sprawdzenie czy jest null'em.

 

Mam wyraźnie powiedziane, że mam wyświetlić jej elementy za pomocą osobnej metody.

Rozumiem ze WypiszElementyTab() nie jest wg Ciebie osobna metoda. To w takim wypadku co to jest osobna metoda :?:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeszcze raz. Widocznie to zagmatwałem. Mam klasę Main. W niej tablicę tab obiektów klasy Budynek oraz metodę main. W metodzie main do tab zapisywane są kolejne obiekty, tyle, ile zażyczył sobie użytkownik. Mam za zadanie wypisać na ekranie pewne dane ze wszystkich elementów tab. Banalna sprawa. Tylko, że mam to zrobić za pomocą METODY, a nie pętli W metodzie main. Rozumiesz? Jeśli umieszczam sobie pętelkę w metodzie main, to wszystko działa jak należy. Natomiast jeśli tworzę osobną metodę (dla przykładu WypiszElementyTab() ), to sprawa się chrzani, a ja nie wiem czemu. Podpowiedziałeś mi, żebym napisał tą instrukcję if. Ale ona rozwiązała tylko sprawę wywalania komunikatu o błędzie (a co za tym idzie wywalania całego programu). Jednak z niewiadomych mi przyczyn, ona nie wypisuje elementów tablicy. Nie wiem czemu. Problem wydaje mi się banalny, więc dziwię się co też może tu być nie tak.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

1. Zauwaz ze ta petla zostala zaproponowana wlasnie w srodku Zadanej przez ciebie funkcji WypiszElementyTab() gdzie jest to funkcja skladowa zadanej klasy Main

 

mozesz sprobowac tak:

 

static void WypiszElementyTab() {     if (tablica == null )     {        System.out.println("tablica == null");       return;    }     for (int i=0, max=tablica.length; i<max; i++)     {         if (tablica[i] != null)        {             System.out.println(tablica[i].metodaKlasyBudynek());         }        else        {             System.out.println("null");        }    }       }

czyli w main wywolujesz sobie WypiszElementyTab(); i powinno sie cos wypisac o ile to tam zapisales.

 

2. Nie jestem taki pewny czy da sie wypisac zawartosc tablicy bez przegladneicia jaj elementow:

ale zawsze mozna sprobowac na hama

 

static void WypiszElementyTab() {     if (tablica == null )     {        System.out.println("tablica == null");       return;    }     System.out.println(tablica.toString());      }

choc wtedy kazdy klasa ktora siedzi sobie w tablicy musi przeladowac toString(). <- zakladajac ze mozesz to zrobic to ma to szanse zadzialac

 

Ostrzegam ze pisze na zywca kod i nie sprawdzam poprawnosci.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...