Avatar billede chr.kj Nybegynder
18. december 2007 - 17:07 Der er 12 kommentarer og
1 løsning

Hvorfor virker min ret-funktion ikke (igen)

Fik det løst første gang uden egentlig at have ændret noget i koden? og nu er den gal igen..

Den vil kun rette det første element i min liste og jeg kan ikke forstå hvorfor..

Min kode ser sådan ud til at finde varen, få den til at matche med det der står i varenummer i min Jlist og gør den det er der bonus :o):

public KasseInterface findVare( String varenummer ) {
        System.out.println("finder vare for '" + varenummer + "'");
        for( KasseInterface elem : varer ) {
            if (elem.getVarenummer() == varenummer )                       
                System.out.println("fandt vare '" + elem + "'");
                return elem;
                }
            System.out.println("fandt ikke nogen vare!!!");
            return null;
        } 

Jeg bruger denne kode til at rette i felterne med:

OpretVare vare = (OpretVare) lageret.findVare( jTextFieldVarenummer.getText() );       
       
        vare.setVarenavn( jTextFieldVarenavn.getText() );
        vare.setVarebeskrivelse( jTextFieldBeskrivelse.getText() );               
        vare.setLagerAntal( Integer.parseInt( jTextFieldLagerAntal.getText() ));
        vare.setSalgspris( Float.parseFloat( jTextFieldSalgspris.getText() ));   
        vare.setLagerPlacering( (String) jComboBoxLagerPlacering.getSelectedItem() );
       
        jListOversigt.setListData( lageret.getVarer().toArray() );       
       
        jTextFieldOplysningsFelt.setText( "Varen er rettet" );

Jeg kan ikke forstå hvorfor det ikke virker. Nogen der ved had der er galt??
Avatar billede chr.kj Nybegynder
18. december 2007 - 17:10 #1
Jeg har prøvet med

if (elem.getVarenummer().equals(varenummer) )

Men resultatet er det samme?
Avatar billede renerr Nybegynder
18. december 2007 - 19:55 #2
public KasseInterface findVare( String varenummer ) {
        System.out.println("finder vare for '" + varenummer + "'");
        for( KasseInterface elem : varer ) {
            if (elem.getVarenummer().equals(varenummer) ){                       
                System.out.println("fandt vare '" + elem + "'");
                return elem;
                }
            System.out.println("fandt ikke nogen vare!!!");
            return null;
        } 
}

Dine tuborg parenteser ser ikke rigtige ud, jeg har prøvet at sætte dem ind. Hvis du skal sammeligne to strenge, skal du bruge object.equals(). Håber det kan hjælpe!
Avatar billede chr.kj Nybegynder
18. december 2007 - 20:04 #3
Ok. Takker for svaret.. Så kode skal se sådan ud :

public KasseInterface findVare( String varenummer ) {
        System.out.println("finder vare for '" + varenummer + "'");
        for( KasseInterface elem : varer ) {
            if (elem.getVarenummer()object.equals(varenummer) ) <-- Object.equals{                       
                System.out.println("fandt vare '" + elem + "'");
                return elem;
                }
            System.out.println("fandt ikke nogen vare!!!");
            return null;
        } 
}

Er det korrekt?
Avatar billede renerr Nybegynder
18. december 2007 - 20:15 #4
Bare som jeg skrev den:

public KasseInterface findVare( String varenummer ) {
        System.out.println("finder vare for '" + varenummer + "'");
        for( KasseInterface elem : varer ) {
            if (elem.getVarenummer().equals(varenummer) ){                       
                System.out.println("fandt vare '" + elem + "'");
                return elem;
                }
            System.out.println("fandt ikke nogen vare!!!");
            return null;
        } 
}
Avatar billede chr.kj Nybegynder
18. december 2007 - 20:18 #5
Havde nogle {} placeret forkert og efter at have rettet det virker det.

renerr smid lige et svar... :o)

Takker for hjælpen.

Du må gerne alligevel svare på mit spørgsmål om object.equals :o)
Avatar billede chr.kj Nybegynder
18. december 2007 - 20:19 #6
Koden som virkede ser sådan ud:

public KasseInterface findVare( String varenummer ) {
        System.out.println("finder vare for '" + varenummer + "'");

        for (KasseInterface elem : varer ) {
            if (elem.getVarenummer().equals(varenummer)) {                 
                System.out.println("fandt vare '" + elem + "'");
                return elem;
            }
        }

        System.out.println("fandt ikke nogen vare!!!");
        return null;
}
Avatar billede renerr Nybegynder
18. december 2007 - 20:21 #7
Her er et svar.

Object er er den klasse alle andre nedarver fra, og fra den nedarver du f.eks. metoden equals(Object obj) til at sammenligne objekter. hjalp det?
Avatar billede _carsten Nybegynder
18. december 2007 - 20:25 #8
>> renerr - det er altså ikke rigtigt

public KasseInterface findVare( String varenummer ) {
        System.out.println("finder vare for '" + varenummer + "'");
        for( KasseInterface elem : varer ) {
            if (elem.getVarenummer().equals(varenummer) ){                       
                System.out.println("fandt vare '" + elem + "'");
                return elem;
                }
            // BLIVER UDSKREVET HVERGANG DER IKKE ER ET MATCH
            System.out.println("fandt ikke nogen vare!!!");
            return null;
        } 
}

SKAL DET VÆRE NOGET, MÅ DET VÆRE SÅDAN

public KasseInterface findVare( String varenummer ) {
        System.out.println("finder vare for '" + varenummer + "'");
        for( KasseInterface elem : varer ) {
            if (elem.getVarenummer().equals(varenummer) ){                       
                System.out.println("fandt vare '" + elem + "'");
                return elem;
                }
        } 
        System.out.println("fandt ikke nogen vare!!!");
        return null;
}

Jeg er ikke helt med på dit problem
  1. Finder ovenstående det varenr der står i din JList ??
  2. Er det når du skal rette et varenr i din JList det ikke vises ?
Avatar billede _carsten Nybegynder
18. december 2007 - 20:26 #9
Prøv lige:

        jListOversigt.setListData( lageret.getVarer().toArray() );       
        jListOversigt.repaint();
Avatar billede renerr Nybegynder
18. december 2007 - 20:31 #10
Ja, man kan hurtigt komme til at sætte tuborgparenteser forkert, når man ikke lige bruger sin editor. Det er helt rigtigt Carsten, og iøvrigt ville den returnere null i første iteration.
Avatar billede chr.kj Nybegynder
18. december 2007 - 22:12 #11
Hej carsten.

Den metode der virker er den som jeg viste længere oppe i spørgsmålet og den som du selv skriver i dit eksempel.

Jeg havde sat en } forkert og derfor løb den kun løkken igennem en enkelt gang hvad enten om den fandt det korrekte varenummer eller ej.

Mit problem bestod egentlig i begge dele. Jeg ved godt at metoden ikke er optimal, men det er den vi har fået vist på skolen af vores lære.
Jeg bruger den til både at søge og rette i min ArrayList og det virker faktisk fint.

Jeg vil gerne smide nogle point til dig for din hjælp i det andet spørgsmål og fordi du altid er flink til at hjælpe mig når jeg løber ind i problemer :o) - Er 50 fint nok og hvordan gør jeg når dette spørgsmål er lukket?
Avatar billede _carsten Nybegynder
19. december 2007 - 16:34 #12
Mht. spørgsmål, så er dette spm. reelt lukket, i og med renerr har lagt et svar som du har accepteret, men det er ingen hindring for at vi kan fortsætte.

Dit problem er altså pt. at din ArrayList bliver rettet korrekt, men dette vises ikke i din JList - ikke sandt ?

Virkede: jListOversigt.repaint(); ??
Avatar billede chr.kj Nybegynder
19. december 2007 - 16:46 #13
Jeg opretter lige et andet spørgsmål hvor du kan svare..

Jeg har nok ikke udtrykt mig tydelig nok, men mit problem bestod i at når jeg ville rette et objekt i min arrayliste indsatte den rettelsen på plads nummer 1 i min jList i stedet for nummer 3 (hvis det var der jeg ville rette).

Jeg har ikke prøvet med repaint(); Hvad gør den funktion? Opdatere den indholdet i min jList??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester