22. december 2007 - 11:19
Der er
11 kommentarer og 1 løsning
Problem med while løkke.
Jeg har et problem med min while løkke, som jeg ikke helt forstår. Som jeg har forstået det med disse løkker så gentager de løkken indtil betingelserne ikke længere er opfyldt..Er det ikke korrekt? Mit problem består af,at jeg gerne vil hente en liste ud med varer der er på lager i x-antal Koden til at køre min while løkke ser sådan ud: public KasseInterface hentLager( int value ) { for( KasseInterface elem : varer ) { while (value >= elem.getLagerAntal() ) { System.out.println( "Fandt følgende varer" + elem ); return elem; } } JOptionPane.showMessageDialog(null, "Ingen varer skal genbestilles." ); return null; } Til at kunne indtaste hvad x-antal på lager skal være har jeg i min GUI et felt og en knap: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // Her indhentes lagerlisten.. try { GemOgHent get = new GemOgHent(); lageret = (Lager) get.hent( "lagerliste.dat" ); jListOversigt.setListData( lageret.getVarer().toArray() ); } catch( Exception error ) { jTextFieldOplysningsFelt.setText( "Listen kunne ikke hentes " + error.toString() ); } Vare vare = (Vare) lageret.hentLager( Integer.parseInt( jTextField1.getText() )); //Her smides data retur og vises i en liste: jListVisLagerliste.setListData( lageret.getVarer().toArray() ); Hvis jeg har 2 elementer med et lagerantal på f.eks. 2 & 5 og hvis jeg indtaster at 5 som value viser den kun det første element i min system.out.println og i min jList viser den hele listen og ikke kun den varer der er fundet? Hvorfor løber den ikke hele listen igennem - Skal den ikke det? På forhånd tak for hjælpen.
Annonceindlæg fra Computerworld it-jobbank
22. december 2007 - 11:23
#1
Løkken bliver jo ikke færdig. return elem; Ovenstående stopper jo løkken og returnerer :)
22. december 2007 - 12:11
#2
Ahh.. Det var også det jeg havde på fornemmelsen, men hvordan får jeg den så til at løbe alle elementerne igennem og returneren alle hvor antal er på x-antal eller derunder? Er det ved at sætte return elem; længeren ned eller hvordan gør jeg det?
22. december 2007 - 14:01
#3
Det gør du ved at samle dem i en Collection. Eksempel: public ArrayList<KasseInterface> hentLager( int value ) { ArrayList<KasseInterface> foundItems = new ArrayList<KasseInterface>(); for( KasseInterface elem : varer ) { while (value >= elem.getLagerAntal() ) { foundItems.add(elem); System.out.println( "Fandt følgende varer" + elem ); } } return foundItems; }
22. december 2007 - 14:10
#4
OK. Tak for det. Lad mig se om jeg forstået det korrekt. Der oprettes simpelthen en ny ArrayListe hvor de fundne elementer bliver smidt over i. Er det ikke korrekt? Man er altså nød til at smide elementerne over i en ArrayListe for at få løkken til at køre alle elementerne igennem.. Har jeg forstået det korrekt?
22. december 2007 - 14:22
#5
Øv.. Den laver bare en uendelig løkke på det første element den finder i min liste?
22. december 2007 - 14:39
#6
Brug en if i stedet for en while: public ArrayList<KasseInterface> hentLager( int value ) { ArrayList<KasseInterface> foundItems = new ArrayList<KasseInterface>(); for( KasseInterface elem : varer ) { if (value >= elem.getLagerAntal() ) { foundItems.add(elem); System.out.println( "Fandt følgende varer" + elem ); } } return foundItems; }
22. december 2007 - 15:03
#7
Ahhh... Det virker nu efter jeg benyttede if :o) Smid et svar. Hvis jeg gerne vil have min: JOptionPane.showMessageDialog(null, "Ingen varer skal genbestilles." ); return null; Hvor skal den så flettes ind? Jeg har prøvet med en else efter "return foundItems", men får fejlen else without if.
22. december 2007 - 15:10
#8
Den skal sættes ind der hvor du modtager din collection: ArrayList<KasseInterface> foundItems = hentLager(...); if (foundItems.size() == 0) JOptionPane.showMessageDialog(null, "Ingen varer skal genbestilles." );
22. december 2007 - 15:16
#9
OK.. Lækkert... Den havde jeg ikke lige set. Er det ok hvis I deler pointene?? Takker endnu engang for hjælpen begge to :o)
22. december 2007 - 15:18
#10
Det er fint! Jeg overså også den uendelige løkke :)
22. december 2007 - 16:06
#11
Jeg springer nu over på denne her, men ellers tak for tilbudet. :
22. december 2007 - 16:33
#12
Ok. Men du skal i hvertfald have mange tak for hjælpen :o)
Kurser inden for grundlæggende programmering