Problemen met uitvoering van While-loop in Java BlueJ

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Espedapza2021
  • Registratie: Maart 2021
  • Laatst online: 31-03-2021
Hallo allemaal ik loop tegen een probleem aan met mijn code. De bedoeling is dat er uitgeprint wordt:
De rij met klantenpas is leeg.
Als er niemand met klantenpas in rij een of rij twee staat. Als er wel iemand met klantenpas in rij een of rij twee staat moet er staan:
Klanten in de rij met klantenpas:
Voornaam + achternaam van klant.
Er moet staan
De rij met overige is leeg.
Als er niemand zonder klantenpas in rij een of rij twee staat. Als er wel iemand zonder klantenpas in rij een of rij twee staat dan moet er staan:
Klanten in de rij met overige:
Voornaam + achternaam van klant.
Dit is de code die ik zelf heb geschreven. Het uitprinten van de namen doet hij wel maar mijn while statements lijken niet te werken. Hij print nooit de zin "De rij met klantenpas is leeg." uit.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 public void overzichtAlleKlanten()
  { 
    {
    int index = 0;
    while(((index < rijNummerEen.size()) && (!rijNummerEen.get(index).getGotKlantenpas()))&&(((index < rijNummerTwee.size()) && (!rijNummerTwee.get(index).getGotKlantenpas()))))
      {
         System.out.println("De rij met klantenpas is leeg");
        }
    while(((index < rijNummerEen.size()) && (rijNummerEen.get(index).getGotKlantenpas()))&&(((index < rijNummerTwee.size()) && (rijNummerTwee.get(index).getGotKlantenpas()))))
      {
         String info = "" ;
         info += ("Klanten in de rij met klantenpas:" + "\n" );
        {
          for(int i = 0; i < rijNummerEen.size(); i++)
          {
            info += rijNummerEen.get(i).getVoornaam() + " " + rijNummerEen.get(i).getAchternaam() + "\n";
           }
          }
        {
          for(Klanten klant: rijNummerTwee)
          {
            info += klant.getVoornaam() + " " + klant.getAchternaam() + "\n" ;
           }
           }
           System.out.println(info);
        }
    
    {
      
    while(((index < rijNummerEen.size()) && (rijNummerEen.get(index).getGotKlantenpas()))&&(((index < rijNummerTwee.size()) && (rijNummerTwee.get(index).getGotKlantenpas()))))
      {
         System.out.println("De rij met overige is leeg");
        }
  
    { 
      String Info = "" ;
      Info += ("Klanten in de rij met overige:" + "\n" );
      {
        for(Klanten klant: rijNummerTwee)
        {
         if(klant.getGotKlantenpas() == false)
         {
             Info += klant.getVoornaam() + " " + klant.getAchternaam() + "\n" ;
         }
        }   
        }
      System.out.println(Info);
        }
    }
    
}
}

Ik heb dit geprogrammeerd in BlueJ. Hebben jullie enig idee waarom deze code niet werkt?
Alvast heel erg bedankt.

Alle reacties


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 01:56

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Die vragen wanneer je hier een nieuw topic opent staan er niet voor niets ;)
Mijn vraag
...

Relevante software en hardware die ik gebruik
...

Wat ik al gevonden of geprobeerd heb
...
Om te beginnen: heb je al eens gedebugged? (Debuggen: Hoe doe ik dat?)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Mint
  • Registratie: Mei 2005
  • Laatst online: 22:33
Heb je er al eens in debug mode en breakpoints doorheen gelopen om te kijken wat er precies wel en niet gebeurt en waarom dat zo is? Dat geeft je veel meer inzicht in je code en waarom er gebeurt wat er gebeurt.

Acties:
  • 0 Henk 'm!

  • Espedapza2021
  • Registratie: Maart 2021
  • Laatst online: 31-03-2021
BlueJ heeft zelf een debugger en die geeft geen fout meldingen.

Acties:
  • 0 Henk 'm!

  • DonJunior
  • Registratie: Februari 2008
  • Laatst online: 22:58
Buiten dat je code bijzonder slecht leesbaar is..

Het probleem zal hem zitten in het feit dat je nooit je index ophoogt
Dus hij blijft altijd op index: 0 hangen.

Sowieso snap ik niet zo goed wat je hier nu doet allemaal.
Ik zie een hoop while loops. (daar krijg ik standaard al de kriebels van.. maar dat is een andere discussie)


Hij stapt dus over de eerste while heen, omdat deze niet aan de voorwaarden voldoet. Dus dan komt ie daar ook nooit meer in.

*sowieso


Acties:
  • 0 Henk 'm!

  • Sleepkever
  • Registratie: Juni 2007
  • Laatst online: 14-05 13:29
Espedapza2021 schreef op woensdag 31 maart 2021 @ 14:37:
BlueJ heeft zelf een debugger en die geeft geen fout meldingen.
Een debugger geeft ook zelf niet meer foutmeldingen als de applicatie origineel zou doen. Het stelt je wel in staat om het programma stil te zetten en stapje voor stapje te kijken wat er gebeurt.

Stel bijvoorbeeld eens een breakpoint in op de regel waar je de voornaam + achternaam van de klant aan de string toevoegt. Wat staat er in de variable waardoor je programma tot die beslissing komt en is dat correct? Of zet het breakpoint op de while loop die de problemen veroorzaakt en kijk wat de stand van de variable is voor hij erin stapt. Klopt dat ook met je verwachting?

Ook is je code erg rommelig, begin eens met het opruimen van alle overbodige haakjes en alles recht te zetten, wellicht spot je op die manier al een probleem in de structuur van de applicatie waardoor dit komt.

En het while statement waarin gecontroleerd word of de overige leeg is. Moet dat een loop zijn? Er word nu feitelijk niets aangepast aan de inhoud. Of het zou een if moeten zijn, of je moet nog iets van de argumenten waarop gecontroleerd word bij werken.

Acties:
  • 0 Henk 'm!

  • martyw
  • Registratie: Januari 2018
  • Laatst online: 22:43
Je hebt zo te zien drie objecten met een relatie met elkaar: een klant, een wachtrij, en een winkel o.i.d. met wachtrijen waarvan je het overzicht wilt uitprinten. Per wachtrij heb je klanten met een klantenpas en klanten zonder klantenpas. Als ik je goed begrijp wil je twee lijsten printen, een lijst met alle klanten in beide wachtrijen met een klantenpas en een lijst met klanten zonder kantenpas.

Moeten de twee wachtrijen in het winkel object tegelijkertijd behandeld worden? Als dat niet zo is schrijf dan eerst een methode die een wachtrij behandeld, en pas die toe op beide wachtrijen. Dit helpt ook fouten te voorkomen als beide wachtrijen niet even lang zijn. En het is ook makkelijker een derde wachtrij te openen in je winkel mocht het druk worden.
Het lijkt mij het handigst je wachtrijmethode dan twee nieuwe verzamelingen in je winkel te laten vullen: een met klanten met pas, en een met klanten zonder pas. Daarna als je deze verzamelingen hebt kun je ze uitprinten, als ze leeg blijken te zijn print je 'De rij met overige is leeg.' of zoiets.
Pagina: 1