1 van 1

Keuze

Geplaatst: wo 28 okt 2015, 21:37
door javanoob
Beste leden,
 
Ik zit met het volgende (syntactische) probleem.
 
Opgave 1 in de zelftoets van Le04 , deel 1 in de OU cursus programmeren in Java 1 geeft de volgende oplossing:
 
  1.  private void naamVeldAction(){
  2.     woonplaatsLabel.setText(" ");
  3.     partijLabel.setText(" ");
  4.       String naam = naamVeld.getText();
  5.       ArrayList<Partij>partijLijst = machine.getPartijen();
  6.       for(Partij p : partijLijst){
  7.         Kandidaat k = p.zoek(naam);
  8.         if(k != null){
  9.           woonplaatsLabel.setText("Woonplaats: " + k.getWoonplaats());
  10.           partijLabel.setText("Partij: " + p.getNaam());
  11.           
  12.            }
  13.       
  14.       }
  15.     
  16.   }
 
Een methode voor het afhandelen van een Event.
De oplossing had ik zelf ook al gevonden en ik begrijp waarom dit werkt.
 
Mijn vraag is nu:
 
Waarom kan er in de code geen IF ELSE statement worden geschreven, dus in plaats van de code hierboven, bijvoorbeeld de hieronder geschreven code:
 

 private void naamVeldAction(){
   
     String naam = naamVeld.getText();
      ArrayList<Partij>partijLijst = machine.getPartijen();
      for(Partij p : partijLijst){
        Kandidaat k = p.zoek(naam);
        if(k != null){
          woonplaatsLabel.setText("Woonplaats: " + k.getWoonplaats());
          partijLabel.setText("Partij: " + p.getNaam());
          
           } else {                                                                   else if (k == null){
           woonplaatsLabel.setText(" ");         of                  woonplaatsLabel.setText(" ");
           partijLabel.setText(" ");                                        partijLabel.setText(" ");
        }
      }
    
  }
 

Waarom werkt deze code niet en de bovenste wel?
Waarom worden de Label in de bovenste code wel geleegd, maar niet in de onderste code.
 
Gehele Frame-code in bijlage.
 
 
Alvast bedankt,
 
Groet JavaNoob
 

Re: Keuze

Geplaatst: do 29 okt 2015, 06:43
door Xenion
Ben je al eens met de debugger door je code gegaan? Dat lijkt me iets dat je wel makkelijk zelf zou zien.Hieronder alvast mijn vermoeden, maar leer die debugger wel degelijk gebruiken. Leer stap voor stap door je code gaan en te zien wat er gebeurt.
 
In de bovenste code zeg je:
 
Wanneer een naamVeldAction() plaatsvindt, maak dan eerst woonplaatsLabel en partijLabel leeg en dan gaan we zien of we iets kunnen invullen.
 
In de onderste code zeg je:
Wanneer een naamVeldAction() plaatsvindt, ga dan met een loop door de lijst van partijen. In elke partij zoek je of "naam" voorkomt. Als dat zo is, dan vul je de info in in de labels. Als dat niet zo is, dan maak je de labels leeg. Dan ga je ongeacht of je de persoon al gevonden hebt of niet naar de volgende partij en dàt is misschien niet zo'n goed idee. Enig idee hoe je dat kan tegen gaan?

Re: Keuze

Geplaatst: do 29 okt 2015, 08:10
door physicalattraction

Opmerking moderator

Code in een forumbericht wordt duidelijker als je ze tussen code tags zet.

Code: Selecteer alles

Dit is een voorbeeld van code tussen [ code ] [ /code ] tags, 
maar dan met de spaties verwijderd.

Re: Keuze

Geplaatst: do 29 okt 2015, 21:11
door javanoob
@Xenion
       Je hebt helemaal gelijk, zag de for-statement helemaal over het hoofd. In mijn gedachten ging ik er vanuit dat wanneer de 'k' zou zijn gevonden, dat de statement zou worden afgebroken of niet door zou gaan, terwijl de herhaling gewoon elke 'p' doorloopt. Dus als de 'k' in de laatste 'p' zou staan dan zou het wss nog kunnen, maar wanneer dat niet zo is dan verdwijnt de 'k' (indien aanwezig in een van de andere 'p' 's, zolang het niet de laaste is ) gewoon weer nadat er andere 'p' zijn doorlopen in de herhaling, wat een " " in de label geeft.
 
De eerste code gaat dit al tegen, indien er slechts een 'k' is met de gegeven naam (uniek is). Of je kunt een break of een stop van de herhaling forceren bij een gevonden 'k'.
 
En het leeg maken van een Label of Combobox of iets anders voordat je begint met de invulling van de methode is vaak zinvol, omdat je dan niet gestuurd wordt, de waarden van de vorige zoekactie verdwijnen bij een nieuwe zoekactie, etc...
 
@physicalattraction
        Zal er aandenken......