GRY-Online.pl --> Archiwum Forum

java - odwołanie sie do pola z obiektu bedacego typem listy

11.01.2008
01:39
[1]

.coma. [ Pretorianin ]

java - odwołanie sie do pola z obiektu bedacego typem listy

Mam arrayListe danego typu i chce sie odwołać do pola obiektu tego typu, co musze zribic? Konkretnie chce napisać metode, która bedzie sumowała wage towarów bedacych elementami arrayListy. Towar jest zdefiniowany przez osobna klase i posiada pole waga.
Jeszcze konkretniej chodzi mi o sytuacje:

//metoda która miała liczyć wage obiektów, typu towar posiadajacych pole waga, ale niesty nie działa:

private int wagaWSlocie()

for(int i=0; i<towar.size()-1; i++)

int w=towar.waga.get(i);
suma+=w;

return suma;

11.01.2008
01:43
[2]

wysiak [ Generaďż˝ ]

Co to jest "arrayLista"?
Jakich typow sa wszystkie te rzeczy?
Wpisz tam towar.get(i).waga zamiast towar.waga.get(i).
Naucz sie uzywac angielskich nazw zmiennych, metod, itd..

11.01.2008
02:08
[3]

.coma. [ Pretorianin ]

wielkie dzieki :)
Jeżeli to nie było ironiczne zwrócenie uwagi na to, ze nazwe klasy powinno sie pisac z dużej litery, to ArrayList to klasa kontenerowa.

Co jeszcze jeszcze nalezy poprawić
import java.util.*;
public class Slot

ArrayList<Towar> towar=new ArrayList<Towar>();
private Class typSlotu;
private static final int maxJednostek=20;
private static final int maxKg=50;
private int suma;


private int wagaWSlocie()

for(int i=0; i<towar.size()-1; i++)

int w=towar.get(i).waga;
suma+=w;

return suma;


private int jednostkiWSlocie()

for(int i=0; i<towar.size()-1; i++)

int w=towar.get(i).waga;
suma+=w;

return suma;


private boolean JestMiejsce()

if(towar.wagaWSlocie()=50 || towar.jednostkiWSlocie()=20) //w tym miejscu
return false;
else
return true;





aby zadziałało?

11.01.2008
06:25
[4]

Katane [ Useful Idiot ]

Uzywasz Eclipse/NetBeans? Jezeli nie, to zacznij.
I zmien "=" na "==".

11.01.2008
06:50
[5]

Moby04 [ Legionista ]

Jak zauwazyl Katane w if powinienes uzywac == zamiast = (porownanie zamiast przypisania). Poza tym dobrym pomyslem byloby zamienienie tutaj sprawdzania rownosci (==) na nierownosc (<) - w koncu jak na liscie jest 5 towarow to dalej masz na niej miejsce. Poza tym proponowalbym przerzucenie sie z for(int i=0....) na while z uzyciem iteratora:

Iterator<Towar> it = towar.iterator();
while(it.hasNext())
suma+=it.next().waga; // w tej lini pobierana jest wartosc i wykonuje sie przejscie do nastepnego obiektu w liscie.

Niby tutaj bez roznicy ale nie bedziesz mial problemu z przejsciem na inne typy list (np. LinkedList). Co do konwencji nazewniczej to radzilbym zmienic nazwe listy na cos bardziej znaczacego (towar sugeruje pojedynczy obiekt tego typu).

Poza tym jak juz bedziesz mial dobry warunek if to mozesz napisac metody JestMiejsce() prosciej:
private boolean jestMiejsce()

return (towar.wagaWSlocie().resztaWarunku);


Aha! Jeszcze jedno w linii:
if(towar.wagaWSlocie()=50 || towar.jednostkiWSlocie()=20)
Wprawdzie zalezy do od logiki aplikacji ale || pomyliles chyba z &&. Jesli liscie moze byc maksymalnie 20 elementow lub 50 kilogramow to obydwa warunki musza byc spelnione. Jesli bedzie inaczej to moze sie zdarzy ze na liscie wyladuje 50 obiektow jednokilogramowych, lub 20 obiektow dajmy na to 100 kilogramowych. Obydwie sytuacje sa zle.

11.01.2008
07:00
[6]

.coma. [ Pretorianin ]

dzieki. Nie zauważyłam tego =, nawyk jeszcze ze starych dobrych pascalowskich czasów. Niestety jeszcze nie o to chodzi. Nie rozumiem czemu zwraca mi cannot find symbol-method wagaWSlocie(). Teraz musze spadac na uczelnie, ale jak wróce to zmienie tak jak radzicie, ale mimo wszytsko wolalabym wiedziec czemu teraz jest źle.
z warunkami tez dzieki za uwage :)

11.01.2008
07:05
[7]

Moby04 [ Legionista ]

metody wagaWSlocie i jednostkiWSlocie nie widzi bo ich po prostu nie masz. Sam zlapales sie na pulapke nazewnictwa. Obiekt o nazwie towar jest klasy ArrayList wiec nie ma metod do ktorych sie odwolujesz. Zeby sie do nich dostac powinienes zrobic cos takiego: towar.get(0).wagaWSlocie (analogicznie dla jednostek). Tylko wczesniej upewniac sie ze lista nie jest pusta bo rzuci wyjatkiem.

11.01.2008
07:07
[8]

wysiak [ Generaďż˝ ]

"Nie rozumiem czemu zwraca mi cannot find symbol-method wagaWSlocie()."
Bo to nie jest metoda zmiennej towar (klasy ArrayList), a twojej wlasnej klasy Slot. zmien to na this.wagaWSlocie() lub zwyczajnie wagaWSlocie().

© 2000-2026 GRY-OnLine S.A.