Usuwanie elementów z tablicy wypełnionej obiektami

Usuwanie elementów z tablicy wypełnionej obiektami
hdw3
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:30
0

Mam za zadanie stworzyć 2 metody, jedna wpisuje pracownika na listę(zatrudnia), a druga wypisuje pracownika z listy(zwalnia). Z drugą metodą mam problem, ale żeby go przedstawić najpierw pokaże kod.(Pracownicy dzielą się na Robotników i Urzędników i zadanie wymaga, aby byli zapisani w tablicy).

Kopiuj
class Pracownik{

    
    String nazwisko;
    double etat;

    Pracownik(String nazwisko, double etat)
    {
        this.nazwisko=nazwisko;
        this.etat=etat;
    }
}

class Robotnik extends Pracownik{

    
    double liczbaPrzeprGodz;
    double stawkaGodz;
    int LIMIT=200;

    Robotnik(String nazwisko, double etat, double liczbaPrzeprGodz, double stawkaGodz)
    {
        super(nazwisko,etat);
        this.liczbaPrzeprGodz=liczbaPrzeprGodz;
        this.stawkaGodz=stawkaGodz;
    }
}

class Urzednik extends Pracownik{

    
    double wyplataPodstawowa;
    double premia;

    Urzednik(String nazwisko, double etat, double premia, double wyplataPodstawowa)
    {
        super(nazwisko,etat);
        this.wyplataPodstawowa=wyplataPodstawowa;
        this.premia=premia;
    }
}

Zadanie wymagało, aby (chyba) w ten sposób przedstawić początek kodu (jako, że dopiero zaczynam programować to z chęcią usłyszę jakieś uwagi jeżeli w tym kodzie są błędy, których ani ja, ani kompilator nie widzi), a teraz pokażę jak wykonałem pierwszą metodę, o której mówiłem na początku oraz miejsce, w którym mam problem z drugą metodą.

Kopiuj
class Firma {
    
    Pracownik listaPracownikow[];
    int zatrudPracownicy=0;

    Firma(int a) {
        
    listaPracownikow = new Pracownik[a]; }

    void zatrudnijRobotnika(String nazwisko, double etat, double liczbaPrzeprGodz, double stawkaGodz) {
        
          if (zatrudPracownicy == listaPracownikow.length) {
            return;
       
 } else {
           
 Robotnik rob = new Robotnik(nazwisko, etat, liczbaPrzeprGodz, stawkaGodz);
           
 listaPracownikow[zatrudPracownicy] = rob;
            zatrudPracownicy++;}
    
public static void main(String args[]) {

Firma ob = new Firma(4);
        ob.zatrudnijRobotnika("Sienkiewicz",1,150,2);
        ob.zatrudnijRobotnika("Bulka",1,150,2); }


}



W ten sposób "wprowadzam w życie" pierwszą metodę - "void zatrudnijRobotnika()". W tym momencie zadania napotykam problem, ponieważ muszę napisać metodę, która po podaniu nazwiska pracownika usunie go z listy. Nie wiem w jaki sposób się za to zabrać, moja pierwsza myśl polegała na znalezieniu indeksu tablicy, w której się znajduje obiekt z podanym nazwiskiem i wartość tej tablicy nadpisać null'em, ale nie wiem w jaki sposób namierzyć, na jakiej pozycji w tablicy znajduje się poszukiwany obiekt. Utknąłem w tym momencie i jedyne, co udało mi się napisać to:

Kopiuj
void zwolnij(String nazwisko){}

.
Przepraszam, ze ten kod w tak dziwny sposób wygląda, ale nie wiem czemu część się prezentuje normalnie, a część nie. Jeżeli coś jest niejasnego w tym co wyżej napisałem postaram się wytłumaczyć o co mi chodziło ;).

edytowany 3x, ostatnio: Shalom
EL
  • Rejestracja:około 13 lat
  • Ostatnio:3 miesiące
1

String nazwisko;
double etat;

  • We wszystkich klasach pola powinny mieć zasięg prywatny a dostęp do nich ewentualnie przez gettery, czyli:
Kopiuj
private String nazwisko;

public String getNazwisko(){
return nazwisko;
}

itd reszta też.

void zatrudnijRobotnika(String nazwisko, double etat, double liczbaPrzeprGodz, double stawkaGodz) {

  • Nie lepiej przekazać Ci już konkretny obiekt? Np.
Kopiuj
void zatrudnijPracownika(Pracownik pracownik)

Hmm...

if (zatrudPracownicy == listaPracownikow.length) {
return;
} else {

  • Wyrzuciłbym stąd ten return i wyświetlił komunikat że lista jest pełna albo coś podobnego.

  • Co do zwolnienia to możesz zrobić np. jakąś pętle która przechodzi przez wszystkie elementy Twojej tablic i sprawdza którego pracownik tak się nazywa.

Ps. Musi być tablica? Nie może być lista?

edytowany 3x, ostatnio: eL
hdw3
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:30
0

*Dzięki za radę z getterami!

Kopiuj
void zatrudnijPracownika(Pracownik pracownik) 

*Niestety nie wiem jak dokładnie działa taka metoda (dopiero od niedawna zacząłem czytać o programowaniu obiektowym), ale na pewno trzeba zrobić 2 oddzielne metody - jedna zatrudniająca robotnika, druga urzędnika (tak wynika z treści zadania, które mam do zrobienia)

Kopiuj
 

*Już podmieniłem w wersji na komputerze tego returna na odpowiedni komunikat ;)

Kopiuj
 

*Właśnie próbowałem to zwolnienie zrobić za pomocą pętli, w ten sposób:

Kopiuj
 void zwolnij(String nazwisko)
{
       for(int i=0; i<zatrudPracownicy; i++)
        {
                  if( listaPracownikow[i]==???)
                     {
                         listaPracownikow[i]=null;
                       }
         }
}

W tym momencie znowu utknąłem, ponieważ nie wiem, co wpisać w miejsce "???" aby if "wyłapał" pracownika, którego nazwiska podaję po przez metodę zwolnij.

Kopiuj
 

Musi być w postaci tablicy

EL
  • Rejestracja:około 13 lat
  • Ostatnio:3 miesiące
1

Idziesz w dobrym kierunku więc nie będę Ci dawał gotowego rozwiązania żeby nie psuć Ci zabawy ;)

Kopiuj
1.  void zwolnij(String nazwisko)
{
     2.  for(int i=0; i<zatrudPracownicy; i++)
        {
              3.    if( listaPracownikow[i]==???)
                     {
                  4.       listaPracownikow[i]=null;
                       }
         }
}

Dodałem cyferki żeby było łatwiej analizować.

  1. Zauważ że przyjmujesz tu nazwisko, a więc to właśnie to pole będziesz porównywał do tych z listy pracowników
  2. Może tak zostać choć lepszym rozwiązaniem byłoby zrobienie for(int i=0; i<listaPracownikow.lenght(); i++) .
  3. Zacząłeś całkiem okej, ale w ten sposób listaPracownikow[i] wyciągniesz 1 cały obiekt pracownika. I okej, aczkolwiek interesuje Cię jego nazwisko a nie cały pracownik.
    Są więc 2 sposoby:
Kopiuj
Pracownik pracownik = listaPracownikow[i];
if (pracownik.getNazwisko().equals(nazwisko){...}

Albo po prostu:

Kopiuj
if (listaPracownikow[i].getNazwisko().equals(nazwisko){...}

Ważne: Porównuj Stringi nie przez znak porównania ale przez equals (Dlaczego: http://stackoverflow.com/a/7520464)
4. Ogólnie mogłoby tak być, aczkolwiek zastanów się jak rozwiążesz taki przypadek:

  • Deklarujesz że firma zatrudnia 4 osoby
  • Dodajesz 4 osoby do tablicy
  • Usuwasz pracownika o nazwisku X i Y którzy w tablicy byli na pozycji np. 1 i 3.
  • Chcesz znowu dodać pracownika, skąd będziesz wiedział w które miejsce możesz go dodać?
edytowany 1x, ostatnio: eL
hdw3
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:30
0

Dzięki za pomoc! ;)
Wydaje mi się, że teraz już wiem jak to zrobić.

EL
Powodzenia! ;)
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)