Avatar billede chr.kj Nybegynder
06. december 2008 - 00:49 Der er 17 kommentarer og
1 løsning

Problemer med en metode.

Hejsa.

Jeg er løbet ind i et problem jeg ikke helt kan finde ud af.

Mit problem består af, at jeg skal hente et navn udfra et nummer i en ArrayListe

Der er flere klasser indover og jeg vil forsøge at smide de metoder og ArrayLister jeg benytter her.

Hvis vi starter helt fra nederst i hirakiet med min Medlems klasse som består af nogle variabler, bla. navn og medlemsnr.

Jeg har i denne klasse bla. metoderne:

public String getNavn()
    {
        return navn;
    }
   
    public int getMedlemsnr()
    {
        return medlemsnr;
    }
   
I en anden klasse jeg har kaldt MedlemsListe har jeg en ArrayListe:

private ArrayList<Medlem> medlemmer = new ArrayList<Medlem>();

og min hentNavn metode som søger min ArrayListe igennem og hvis der er et match i medlemsnummeret returnere den navnet på medlemmet:

public String hentNavn(int medlemsnr)
  {
    String resultat = "";
    int i=0;
    while (i<medlemmer.size() && medlemsnr!=medlemmer.get(i).getMedlemsnr())
      i++;
    if (i<medlemmer.size()) // Der er fundet
      resultat = medlemmer.get(i).getNavn();
    return resultat;
  }
   
Jeg har så en kontrol klasse som skaber referencer mellem mine objekter som jeg har i forskellige ArrayLister
I denne har jeg en reference til min hentNavn metode som findes i MedlemsListe klassen:

private MedlemsListe medlemsRef;

    public Kontrol()
    {
        medlemsRef = new MedlemsListe();
    }

    public String hentMedlemsnr( int medlemsnr )
    {
        return medlemsRef.hentNavn( medlemsnr );
    }
   
I min GUI klasse har jeg så 2 tekst felter hvor jeg i feltet tfMedlemsnr indtaster medlemsnavnet og navnet skal så returneres i feltet tfNavn

private void tfMedlemsnrActionPerformed(java.awt.event.ActionEvent evt) {                                           
// TODO add your handling code here:
    tfNavn.setText(fitnessCenterKontrol.hentMedlemsnr(Integer.parseInt(tfMedlemsnr.getText())));
}

Min problem er, at der ikke kommer noget frem selvom jeg ved at medlemsnummeret findes i min MedlemsListe - Er der nogle der kan forklare mig hvad jeg gør galt?

På forhånd tak for hjælpen.
Avatar billede erikjacobsen Ekspert
06. december 2008 - 00:54 #1
Jeg kan ikke umiddelbart se noget galt. Men vi ser kun noget af det, så et par gæt:
- din tfMedlemsnrActionPerformed-metode udføres ikke
- din medlemsliste er tom
Avatar billede arne_v Ekspert
06. december 2008 - 01:30 #2
prøv og erstat

medlemsnr!=medlemmer.get(i).getMedlemsnr()

med

medlemsnr.equals(medlemmer.get(i).getMedlemsnr())
Avatar billede arne_v Ekspert
06. december 2008 - 01:33 #3
Hvis Medlem klassen fik en equals metode, så kunne MedlemsListe hentNavn bruge
ArrayList indexOf - eller måske skulle MedlemsListe bruge en HashMap<String,Medlem>.
Avatar billede chr.kj Nybegynder
06. december 2008 - 12:11 #4
Hej og tak for svarene :)

@arne_v
Hvis jeg skriver
while (i<medlemmer.size() && medlemsnr.equals(medlemmer.get(i).getMedlemsnr()))
får jeg compilerfejl: int cannot be dereferenced

Hvad hulen betyder det?

HashMap har vi desværre ikke lært om endnu, så jeg tror at jeg vil skyde mig selv i foden hvis jeg begynder at benytte sådan en fremfor en ArrayListe ;p
Avatar billede chr.kj Nybegynder
06. december 2008 - 12:20 #5
@erik
Er der noget mere kode som jeg evt. kan vise dig for at du hjælpe?
Mit Array burde være "fyldt" da jeg indlæser objekter til min liste inden jeg laver søgningen.
Hvordan kan jeg se om min ActionPerformed metode udføres?
Avatar billede erikjacobsen Ekspert
06. december 2008 - 12:37 #6
Hvis du kan sætte breakpoints (debugge), kan du se hvor langt du kommer.

Det er en klassisk fejl at fylde noget i et andet array, end der hvor man efterfølgende læser. Men det kan jeg ikke se om du gør.
Avatar billede chr.kj Nybegynder
06. december 2008 - 12:41 #7
Hej erik.

Du bliver desværre nød til at uddybe med breakpoints?
Avatar billede erikjacobsen Ekspert
06. december 2008 - 13:20 #8
Dit udviklingsværktøj kan indeholde noget til debugging (herunder breakpoints)
Avatar billede chr.kj Nybegynder
06. december 2008 - 13:43 #9
Hmm.. Noget kunne godt tyde på at min Actionperformed metode ikke virker korrekt (der ker i hvert fald intet når jeg indtaster numeret i feltet og trykker på Enter), men jeg kan ikke gennemskue hvorfor den ikke virker.

Jeg har forsøgt at "debugge" min GUI via Netbeans og der kommer ingen fejl?
Avatar billede erikjacobsen Ekspert
06. december 2008 - 14:50 #10
Lad mig så komme med et lille forslag:

Ret linien
  String resultat = "";
til
  String resultat = "Ikke fundet";

Det gør det muligt at se om din ActionPerformed-metode udføres, kalder søgemetoden, og denne ikke finder noget.

Hvor knytter du din ActionPerformed-metode til den handling, du vil have den til at reagere på?
Avatar billede chr.kj Nybegynder
08. december 2008 - 09:13 #11
Beklager den sene tilbagemelding, men jeg har været til julefrokost i weekenden og er først lige kommer ovenpå igen :p

Noget kunne tyde på at min Actionperformend slet ikke virker for der kommer intet frem når jeg trykker på den knap jeg har oprettet til formålet.

---------------------------------------
private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                             
    // TODO add your handling code here:
    String resultat = fitnessCenterKontrol.hentMedlemsnavn(Integer.parseInt( tfHentMedlemsNr.getText() ));
    tfHentMedlemsNavn.setText( resultat );
}

---------------------------------------
Avatar billede chr.kj Nybegynder
08. december 2008 - 09:21 #12
Rettelse til ovestående.. (tror ikke hjernen virker ordentlig efter weekendens lage i sprut..)

Dvs. det ser ud som om at søgemetoden udføres, men den finder ikke noget (kommer med ikke fundet)
Avatar billede erikjacobsen Ekspert
08. december 2008 - 09:53 #13
Så skal du vel undersøge om den liste du søger i er tom.
Avatar billede chr.kj Nybegynder
08. december 2008 - 11:35 #14
Hvis jeg i samme actionperformed sætter følgende ind:

jList1.setListData( ml.getMedlemmer().toArray() );

Hentes og vises objekterne i min ArrayList, så som jeg ser det er den ikke tom.. Gad vide om fejlen ligger i min "hent Navn" metode:

public String hentNavn(int medlemsnr)
  {
    String resultat = "";
    int i=0;
    while (i<medlemmer.size() && medlemsnr!=medlemmer.get(i).getMedlemsnr())
      i++;
    if (i<medlemmer.size()) // Der er fundet
      resultat = medlemmer.get(i).getNavn();
    return resultat;
  }
Avatar billede erikjacobsen Ekspert
08. december 2008 - 12:20 #15
Du har en liste med indhold, men er det den samme liste du kigger i?
Avatar billede chr.kj Nybegynder
08. december 2008 - 15:35 #16
Ahh.. det var der fejlen lå.. :D
Det virker nu.

Smid et svar (eller er der ikke noget med at du ikke samler på point?)
Anyways.. Tusind tak for hjælpen :D
Avatar billede erikjacobsen Ekspert
08. december 2008 - 17:28 #17
Jeg samler slet ikke på point, tak.
Avatar billede chr.kj Nybegynder
09. december 2008 - 08:21 #18
Ok. Tak for hjælpen endnu engang :)
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