Tirador Opublikowano 30 Sierpnia 2004 Zgłoś Opublikowano 30 Sierpnia 2004 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
spicum Opublikowano 30 Sierpnia 2004 Zgłoś Opublikowano 30 Sierpnia 2004 ...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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Tirador Opublikowano 30 Sierpnia 2004 Zgłoś Opublikowano 30 Sierpnia 2004 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
spicum Opublikowano 31 Sierpnia 2004 Zgłoś Opublikowano 31 Sierpnia 2004 ... 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 :?: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Tirador Opublikowano 31 Sierpnia 2004 Zgłoś Opublikowano 31 Sierpnia 2004 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
spicum Opublikowano 31 Sierpnia 2004 Zgłoś Opublikowano 31 Sierpnia 2004 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...