Skocz do zawartości
Mildar

Kolekcje Java

Rekomendowane odpowiedzi

Witam. Czy jest ktoś w stanie mi pomóc wyjaśnić mi pewną rzecz w jav'ie, chodzi mi o kolekcje zwane też kontenerami. Ogólnie rozumiem o co chodzi, ale mam problem z pewną częścią kodu której nie "naprawić" Program składa się z dwóch klas

 

 

import java.util.Set;class Sklep {//kolekcjaSet dost;//konstruktorSklep(){}//usuwanie danego dostawcyvoid usunDostawy(String nazwaDost){dost.remove(nazwaDost);}//zwracanie wartości wszystkich dostaw towarów do sklepudouble waroscTowarow(){double war; //zmienna war pomocniczafor(Dostawa d : dost){war+=;i++;}return war;}//Zwracanie zbioru naz wszystkich dostawcówSet<String> wszyscyDostawcy(){return dost.nazwaDostawcy; //error nie można znaleść symbolu}//Dodawanie nowego Dostawcy bez prarametrówvoid nowaDostawa(){dost.add(new Dostawa());}//Sprawdzanie czy dany dostawcza dostarczył dany towarboolean dostarcza(String nazwaTow,String nazwaDost){if((dost.equals(nazwaTow))&&(dost.equals(nazwaDost))){return true;}else return false;}}

 

class Dostawa {String nazwaTowaru;String nazwaDostawcy;double ilosc;double cenaJednostkowa;}

Chodzi mi o metodę Set<String> wszyscyDostawcy(){...} i metodę double watoscTowaru(){...} nie za bardzo kumam ja odwołać się do Set<String> skoro moja kolekcja to Dostawa, a w metodzie waroscTowaru nie wiem czego użyć by pobrać dane liczbowe z kolekcji(próbowałem z funkcją get(), ale też wywalało mi błąd).

 

PS. Wiem jak się piszę pętle for each, ale nie rozumiem dlaczego/po co się wstawia literkę np. jak w tyj części kodu

for(Dostawa d : dost)
po co jest to "d", ale to na marginesie.

 

PS.2 Nie znalazłem podobnego tematu

Edytowane przez Mildar

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Set trochę nie do tego służy do czego chcesz go użyć, jego głównym zadaniem jest zbieranie referencji do obiektów aby później można było sprawdzać, czy przez przypadek nie są dodane duplikaty, dlatego też interfejs Set nie definiuje metody get.

Masz dwa wyjścia:

 

Na początek:

For (Dostawa d : dost) wykona się tyle razy ile masz dostaw na w kolekcji przy każdej iteracji pod zmienna d podstawiając kolejną dostawe

 

1. Napisać geta samemu używając iteratora lub pętli for która opisałeś (ukrywa przed tobą konieczność używania iteratora bezpośrednio) i za każdym razem przeszukiwać kolekcje i zwracać pożądany element, do tego przeciążyć metodę equals dla klasy dostawa inaczej java sama nie domyśli się jak porównywać jedna dostawę z drugim (będzie porównywała referencje do obiektu które dla dostaw o tej samej nazwie Towaru/dostawcy/ilosci/cenie będą mimo wszystko różne).

2. Drugie nieco prostsze rozwiązanie użyć do trzymania listy dostaw listy bądź mapy Dołączona grafika, chociaż i tutaj przydało by się przeciążyć metode equals.

 

Linki: http://stackoverflow...object-o-method

 

PS. Wczytałem się dokładnie w twój kod i po pierwsze nigdzie nie jest inicjalizowana zmienna dost, poza tym metody widać że nie do końca rozumiesz idee kolekcji.. Kolekcja jest zbiorem elementów w twoim wypadku zbiorem elemtów typu dostawa więc nie możesz zrobić tak: "dost.remove(nazwaDost)" musisz w jakiś sposób wskazać o który obiekt Ci chodzi (pamiętaj obiekt definiowany jest przez jvm rozróżniany przez referencje a nie Stringa )

Edytowane przez Wolan

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ę...