• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

konstruktor , zmienna liczba argumentow , java

Mały hosting, OGROMNE możliwości
0 głosów
871 wizyt
pytanie zadane 14 listopada 2015 w Java przez Kolboch Bywalec (2,320 p.)
public class Firma
{
    Pracownik[] pracownicy;
    Pracownik szef;
    public Firma (Pracownik pracownik0 , Pracownik...pracownicy){
    szef = pracownik0;
    }
    public void wypiszPracownikow(){
        System.out.println("Szefem firmy jest:");
        szef.toString();
        System.out.println("Pozostali pracownicy to:");
        for(int i =0 ; i < pracownicy.length ; i++){
            pracownicy[i].toString();
        }
    }
}

Chciałbym zapytac jak wstawic tablice ze zmienna liczba argumentow do konstruktora. Przy wywolywaniu moge powkladac tylu pracownikow ilu chce, ale nie znajduja sie oni pozniej w tablicy i mam zwracane null pointer exception. Z koleji bez inicjowania tablicy przed konstruktorem jest problem wgl z kompilacja programu - nie rozpoznaje "pracownicy" przy wykonywaniu petli.

Z gory dziekuje za pomoc.
Pozdrawiam

3 odpowiedzi

+1 głos
odpowiedź 14 listopada 2015 przez Javowiec Pasjonat (21,560 p.)
wybrane 15 listopada 2015 przez Kolboch
 
Najlepsza

Zauważ, że w konstruktorze podajesz szefa i tabelę pracowników, lecz zapisujesz do pola klasy tylko szefa. Skoro nie zapisujesz pracowników, to normalne, że pole klasy pracownicy jest puste i dostajesz NullPointerException. wink

Czyli powinno być:

public Firma (Pracownik szef, Pracownik... pracownicy){
	  this.szef = szef;
	  this.pracownicy = pracownicy;
}

Słowo kluczowe this z nazwą po kropce odnosi się do danego pola tej klasy, zaś zwykła nazwa, do danego parametru konstruktora.

komentarz 15 listopada 2015 przez Kolboch Bywalec (2,320 p.)
Super, dzieki za pomoc! W nauce umknęło mi zastosowanie this ;)
+1 głos
odpowiedź 14 listopada 2015 przez Radfler VIP (101,030 p.)

Nie znam się zbytnio na Javie, ale zrób tak:

1. Aby powkładać tych pracowników (ze listy argumentów) do tablicy pracownicy, zrób tak:

// Tworzymy tablicę o długości listy argumentów
this.pracownicy = new Pracownik[pracownicy.length];

// Przepisujemy argumenty do tablicy
int i = 0;
for(Pracownik p : pracownicy) {
    this.pracownicy[++i] = p;
}

2. Troszkę zepsułeś funkcję wypiszPracownikow, gdyż nic ona nie wypisuje:

public void wypiszPracownikow(){
        System.out.println("Szefem firmy jest:" + szef);
        System.out.println("Pozostali pracownicy to:");
        for(int i =0 ; i < pracownicy.length ; i++){
            System.out.println(pracownicy[i].toString());
        }
    }

Powinno działać, jak coś to pytaj! Pozdrawiam! :)

 

komentarz 14 listopada 2015 przez Kolboch Bywalec (2,320 p.)
Jesli chodzi o wypisywanie, to w pierszej wersji bedzie dzialac. W poprzedniej klasie ( Pracownik) mam taka metode, ktora odpowiada za wypisanie ich danych.

Mogłbys mi wyjasnic te linijke : for(Pracownik p : pracownicy) ? nie znam jeszcze zastosowania ":".

Sprawdzałem i niestety coś jeszcze nie działa, może jak zrozumiem działanie w.w. ":" będe umiał to włożyć to tego programu we własciwym miejscu.
Dzieki za zainteresowanie, pozdrawiam :)
komentarz 14 listopada 2015 przez Radfler VIP (101,030 p.)
Jest to pętla for-each, która służy do przeglądania kolekcji. To co jest po lewej stronie dwukropka jest referencją do i-tego elementu z kolekcji po prawej stronie.
komentarz 14 listopada 2015 przez Javowiec Pasjonat (21,560 p.)
Tylko po co tak kombinować z pętlą zamiast od razu przypisać tablicę do pola klasy?
komentarz 14 listopada 2015 przez Radfler VIP (101,030 p.)

Nie znam się zbytnio na Javie (...)

No cóż, może dlatego;) 

komentarz 15 listopada 2015 przez Kolboch Bywalec (2,320 p.)
Dzieki za pomoc! Wprawdzie znalazła sie lepsza opcja, ale dzieki Tobie tez nauczylem sie czegos nowego ;)
0 głosów
odpowiedź 15 listopada 2015 przez Kolboch Bywalec (2,320 p.)

tu wklejam juz poprawna wersje, pomoc bardzo sie przydala :))

Błędem było również nie umieszczenie metod do wyswietlania (toString()) w wierszu służacym do wypisywania w konsoli (System.out.println). 


public class FirmaBeta
{ 
    Pracownik szef;
    Pracownik[] pracownicy;
    public FirmaBeta (Pracownik pracownik0, Pracownik...pracownicy){
    szef = pracownik0;
    this.pracownicy = pracownicy;
    }
    public void wypiszPracownikow(){
        System.out.println("Szefem firmy jest:" + szef.toString());
        System.out.println("Pozostali pracownicy to:");
        for(int i =0 ; i < pracownicy.length ; i++){
            System.out.println(pracownicy[i].toString());
        }
    }
}


Pozdrawiam :))

Podobne pytania

0 głosów
1 odpowiedź 313 wizyt
pytanie zadane 24 stycznia 2017 w Java przez 0xf Dyskutant (8,180 p.)
0 głosów
1 odpowiedź 1,284 wizyt
pytanie zadane 30 września 2017 w Java przez Dieva Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 504 wizyt
pytanie zadane 14 września 2017 w Java przez niewiem17 Początkujący (480 p.)

93,718 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,263 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...