Mildar Opublikowano 23 Stycznia 2013 Zgłoś Opublikowano 23 Stycznia 2013 (edytowane) 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 24 Stycznia 2013 przez Mildar Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Wolan Opublikowano 20 Lutego 2013 Zgłoś Opublikowano 20 Lutego 2013 (edytowane) 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 , 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 20 Lutego 2013 przez Wolan Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...