Voorwaarden en lussen in Java

Leer hoe een Java-programma beslissingen neemt en werk herhaalt. Schrijf voorwaarden met vergelijkingsoperatoren en logische operatoren, kies tussen uitvoeringspaden met if, else if-ketens en switch-expressies en herhaal instructies met while-, do-while- en for-lussen. Gebruik daarbij break en continue waar die van pas komen. Pas vervolgens de standaardluspatronen toe om te tellen, op te tellen, gemiddelden en de grootste waarde te berekenen, te zoeken en tabellen af te drukken. Controleer je lussen door de uitvoering stap voor stap te volgen.

BeginnerLes 2 van 11 in Cursus Java programmeren: klassen, overerving, collecties en streams

Wat je leert

  1. Bouw voorwaarden die waar of onwaar zijn uit vergelijkingen en combineer die met logische operatoren, zodat een programma precies de bedoelde situatie test.
    • Vergelijk waarden en sla de resultaten op als booleaanse waarden
      Gebruik de zes vergelijkingsoperatoren voor getallen en tekens, sla resultaten op in boolean-variabelen en vergelijk strings en kommagetallen correct.
    • Combineer voorwaarden met &&, || en !
      Verbind en ontken voorwaarden met de logische operatoren, voorspel de resultaten met waarheidstabellen en gebruik kortsluitevaluatie en de wetten van De Morgan om correcte, leesbare tests te schrijven.
  2. Laat een programma afhankelijk van voorwaarden verschillende instructies uitvoeren, van een enkele if tot else if-ketens, de conditionele operator en switch.
    • Voer code voorwaardelijk uit met if en else
      Schrijf if- en if-else-instructies met correcte blokken, vermijd de bekende fouten met accolades, puntkomma’s en bereik, en nest beslissingen of kies een waarde met de conditionele operator.
    • Kies uit meerdere gevallen met else-if-ketens
      Gebruik else if-ketens om precies één van meerdere uitkomsten te kiezen, zet de voorwaarden in de juiste volgorde en test de grenzen zodat geen waarde in een gat of in twee gevallen valt.
    • Selecteer op waarde met switch
      Gebruik switch-instructies en switch-expressies om op basis van de waarde van één variabele te kiezen, met cases met pijlen, meerdere labels per case, default en yield, en herken doorvallen in de oudere vorm met dubbele punten.
  3. Schrijf while-, do-while- en for-lussen die het juiste aantal keren worden uitgevoerd en stoppen wanneer dat moet, en stuur ze met break en continue.
    • Herhaal met while zolang een voorwaarde geldt
      Schrijf while-lussen die correct beginnen, worden bijgewerkt en stoppen, gebruik while (true) met break voor herhaling zonder vooraf bepaald einde en volg de uitvoering van een lus stap voor stap.
    • Voer de lusbody minstens één keer uit met do-while
      Gebruik de do-while-lus als de body vóór de eerste test moet worden uitgevoerd, zoals bij invoercontroles en menu’s, en vermijd valkuilen met bereik en puntkomma’s.
    • Doorloop getalbereiken met for-lussen
      Schrijf for-lussen die op- en aftellen en in stappen tellen, voorspel hoe vaak ze worden uitgevoerd, vermijd één-ernaastfouten en kies het juiste soort lus voor een taak.
    • Verlaat lussen of sla iteraties over met break en continue
      Beëindig een lus voortijdig met break, sla de rest van één doorgang over met continue, verlaat geneste lussen met een break met label en houd lussen die voortijdig worden verlaten goed te volgen.
  4. Herken en combineer de standaardluspatronen: tellen en optellen, extrema vinden, zoeken, cijfers verwerken en lussen nesten. Controleer lussen door de uitvoering te volgen en ze te testen.
    • Tel waarden en bereken hun som en gemiddelde
      Gebruik tellers en accumulatoren bij invoer met een stopwaarde, bereken gemiddelden en percentages zonder fouten door geheeltallige deling en bescherm tegen lege invoer en overloop.
    • Zoek extrema, voer zoekacties uit en verwerk cijfers
      Houd de grootste of kleinste waarde tot dan toe bij, zoek met een vlag of door de lus voortijdig te verlaten, test of een of alle waarden aan een voorwaarde voldoen en haal getallen cijfer voor cijfer uit elkaar.
    • Nest lussen en volg en test daarna hun uitvoering
      Schrijf geneste lussen voor tabellen en patronen, voorspel hoe vaak de binnenste body wordt uitgevoerd, volg lussen met een tabel en test ze met randgevallen om één-ernaastfouten en oneindige lussen op te sporen.

Voorwaarden en lussen in Java: uitleg

4 hoofdstukken

1

Bouw voorwaarden die waar of onwaar zijn

Een voorwaarde zet een vraag over programmagegevens om in een waarde die waar of onwaar is. Met vergelijkingen kun je vragen of een getal een grens bereikt of tekst overeenkomt met een commando; met logische operatoren verbind je die tests. Lees de onderdelen van een voorwaarde in de volgorde waarin Java ze evalueert en controleer daarna het gecombineerde resultaat. Zo kun je een bereik, een uitzondering of een beveiligende voorwaarde voor een deling uitdrukken zonder dat een kleine fout in een operator de regel verandert.

1.1 Vergelijkingen en booleaanse waarden

Een voorwaarde heeft het type boolean: die levert true of false op. Java heeft dat expliciete resultaat nodig in een if- of lusvoorwaarde. Een geheel getal op zichzelf is geen voorwaarde, dus while (count) compileert niet; count > 0 stelt een duidelijke vraag die waar of onwaar is.

Vergelijk getallen en tekens
OperatorVraag
<Is de linkerwaarde kleiner?
<=Is die kleiner of gelijk?
>Is die groter?
>=Is die groter of gelijk?
==Zijn de waarden gelijk?
!=Zijn de waarden verschillend?

Met int a = 7; en int b = 10; zijn a < b en a != b true, terwijl a >= b false is. Verschillende numerieke typen kun je vergelijken: 3 == 3.0 is true nadat Java het gehele getal via een verbredende typeconversie omzet naar een double.

Een vergelijking van char-waarden gebruikt Unicode-codenummers. Zo is 'a' < 'b' true. Dat geldt ook voor 'Z' < 'a': hun codes zijn 90 en 97. Alle ASCII-hoofdletters van A tot en met Z gaan in deze volgorde vooraf aan de kleine letters van a tot en met z.

Sla een bruikbaar antwoord op
int age = 17;
boolean isAdult = age >= 18;
System.out.println(isAdult);

De vergelijking geeft false, dat wordt opgeslagen in isAdult en daarna wordt afgedrukt. Dankzij een betekenisvolle naam kan latere code direct if (isAdult) gebruiken.

Houd toewijzing en vergelijking uit elkaar. = slaat een waarde op; == vergelijkt waarden. Voor een geheel getal werkt if (x = 5) niet, omdat de toewijzing een geheel getal oplevert. Voor een booleaanse waarde compileert if (done = true), zet de instructie done op true en wordt de tak uitgevoerd. Om de bestaande vlag te testen, schrijf je if (done).

Vergelijk tekst en berekende kommagetallen

Gebruik command.equals("quit") om de tekens van een string te vergelijken. Tekst die als “quit” is ingevoerd, komt overeen; “Quit” niet. Gebruik equalsIgnoreCase als het onderscheid tussen hoofdletters en kleine letters niet belangrijk is, en !command.equals("quit") om op verschillende tekst te testen. De operator == controleert of strings naar hetzelfde object verwijzen en is daarom niet geschikt om de inhoud van gebruikersinvoer te vergelijken.

Binaire zwevendekommagetallen kunnen veel decimale breuken niet exact opslaan. 0.1 + 0.2 levert 0.30000000000000004 op, dus 0.1 + 0.2 == 0.3 is false. Een vergelijking met een tolerantie controleert hoe ver de berekende waarden uit elkaar liggen:

double sum = 0.1 + 0.2;
boolean closeEnough = Math.abs(sum - 0.3) < 1e-9;

Hier maakt Math.abs het verschil niet-negatief; het kleine verschil ligt onder 1e-9, dus closeEnough is true. Kies een tolerantie die past bij de vereiste precisie van de berekening. Exacte vergelijkingen van int-waarden hebben geen afrondingsprobleem door zwevendekommagetallen.

Test deelbaarheid en bereiken

n % 3 == 0 test of een geheel getal deelbaar is door 3. Gebruik voor oneven getallen n % 2 != 0: die test omvat ook negatieve oneven waarden, omdat -7 % 2 gelijk is aan -1.

Schrijf elke kant van een bereiktest afzonderlijk: 0 < x && x < 10. Java kan 0 < x < 10 niet lezen als een wiskundige keten: de eerste vergelijking levert al een booleaanse waarde op, die niet met 10 kan worden vergeleken.

Belangrijkste punten

  • Een voorwaarde moet een boolean opleveren.
  • Gebruik = om toe te wijzen en == om numerieke waarden te vergelijken.
  • Vergelijk de inhoud van strings met equals of equalsIgnoreCase.
  • Vergelijk berekende kommagetallen met een passende tolerantie.
  • Gebruik n % 2 != 0 voor oneven gehele getallen, ook als ze negatief zijn.

1.2 Gecombineerde voorwaarden en kortsluitevaluatie

Logische operatoren combineren volledige voorwaarden die waar of onwaar zijn. Lees een gecombineerde voorwaarde als een regel over de gegevens en test daarna waarden die wel en niet aan de regel zouden moeten voldoen.

Verbind en ontken tests

&& betekent EN: beide delen moeten waar zijn. || betekent OF: minstens één deel moet waar zijn, ook als beide dat zijn. ! betekent NIET en keert één booleaanse waarde om.

| p | q | p && q | p || q | | --- | --- | --- | --- | | true | true | true | true | | true | false | false | true | | false | true | false | true | | false | false | false | false |

Voor een comfortabele temperatuur van 18 tot en met 24 °C zijn beide grenzen nodig: temp >= 18 && temp <= 24. Buiten dat interval betekent temp < 18 || temp > 24. Als je de binnengrenzen met || verbindt, wordt elk getal geaccepteerd: onder 18 is de test voor de bovengrens waar en boven 24 is de test voor de ondergrens waar.

Elke operand moet een booleaanse expressie zijn. Schrijf x == 1 || x == 2, omdat x == 1 || 2 een geheel getal plaatst waar een booleaanse waarde nodig is. Voor een geheel getal is !x > 5 ongeldig; !(x > 5) ontkent de hele vergelijking.

Evalueer alleen wat nodig is

Java evalueert && en || van links naar rechts en gebruikt kortsluitevaluatie als het linkerdeel de uitkomst bepaalt. Bij && wordt de rechterkant overgeslagen als de linkerkant onwaar is. Bij || gebeurt dat als de linkerkant waar is.

int total = 36;
int count = 0;
boolean largeAverage = count != 0 && total / count > 10;

De eerste vergelijking is onwaar, dus de deling wordt overgeslagen en largeAverage wordt false. Draai je de operanden om, dan vindt de deling vóór de beveiligende voorwaarde plaats; geheeltallige deling door nul werpt een ArithmeticException op. Zet de veiligheidscontrole vóór de berekening die die controle beschermt.

Maak de groepering zichtbaar

Van hoogste naar laagste prioriteit zijn de relevante operatoren !, ordevergelijkingen (<, <=, >, >=), gelijkheidsvergelijkingen (==, !=), && en dan ||. Dus a || b && c wordt gegroepeerd als a || (b && c). Als a waar is en b en c onwaar zijn, is die expressie waar; (a || b) && c is onwaar. Met haakjes laat je zien welke regel je bedoelt.

De wetten van De Morgan verplaatsen een negatie over een gecombineerde voorwaarde:

  • !(p && q) is gelijk aan !p || !q.
  • !(p || q) is gelijk aan !p && !q.

Ontken elk deel en verwissel de verbindende operator. Toegepast op het temperatuurbereik is !(temp >= 18 && temp <= 24) gelijk aan temp < 18 || temp > 24.

Druk een regel met een uitzondering uit

Een gregoriaans schrikkeljaar is deelbaar door 4, behalve dat een eeuwjaar deelbaar moet zijn door 400:

boolean leap = (year % 4 == 0 && year % 100 != 0)
        || year % 400 == 0;

Het eerste deel accepteert 2024. Het verwerpt 1900 omdat 1900 een eeuwjaar is; de laatste test accepteert 2000 omdat dat deelbaar is door 400. Het jaar 2026 voldoet aan geen van beide delen.

Booleaanse variabelen met een naam maken langere tests duidelijk leesbaar, zoals isWeekend || isHoliday. Voor twee booleaanse waarden is ^ exclusieve OF: precies één operand moet waar zijn, net als bij !=. De enkele & en | berekenen ook logische EN en OF op booleaanse waarden, maar evalueren beide operanden; gebruik && en || voor voorwaarden met kortsluitevaluatie.

Belangrijkste punten

  • && vereist beide voorwaarden; || vereist er minstens één.
  • Een beveiligende voorwaarde met kortsluitevaluatie hoort vóór de expressie die die voorwaarde beschermt.
  • && bindt sterker dan ||; haakjes kunnen het resultaat veranderen.
  • De wetten van De Morgan ontkennen beide delen en verwisselen && met ||.
  • Elke kant van een logische operator moet een volledige booleaanse expressie zijn.
  • De enkele & en | evalueren beide operanden.
2

Kies welk pad een programma volgt

Een beslissing stuurt de uitvoering langs een gekozen pad. Eén test kan één actie mogelijk maken, een paar takken kan tussen twee acties kiezen en een keten kan één resultaat uit meerdere bereiken toewijzen. Als de keuze afhangt van exacte waarden van één variabele, biedt switch een andere duidelijke vorm. Om het pad te volgen, controleer je welke voorwaarden worden bereikt, welke tak wordt uitgevoerd en welke variabelen daarna beschikbaar blijven.

2.1 Takken, blokken en waarden kiezen

Een if voert een blok uit als de voorwaarde waar is. Een if met een else kiest precies één van twee blokken. Nadat het gekozen blok is afgerond, gaat de uitvoering verder met de volgende instructie.

Kies een pad
int age = 16;
if (age >= 18) {
    System.out.println("Adult ticket");
} else {
    System.out.println("Youth ticket");
}
System.out.println("Next customer");

De voorwaarde is onwaar, dus de uitvoer is “Youth ticket”, gevolgd door “Next customer”. De laatste instructie hoort bij geen van beide takken. Zet de booleaanse voorwaarde tussen haakjes en de instructies van elke tak tussen accolades.

Zonder accolades hoort alleen de volgende instructie bij een if. Inspringing groepeert geen code. In dit foutieve voorbeeld verschijnt het tweede bericht voor elke score:

if (score < 50)
    System.out.println("Not passed");
    System.out.println("Try again");

Met accolades rond beide afdrukinstructies worden beide voorwaardelijk uitgevoerd. Een andere fout is een puntkomma direct na de voorwaarde: if (x > 10); heeft een lege body. Een blok dat erop volgt, wordt onafhankelijk uitgevoerd en een else na dat onafhankelijke blok heeft geen bijpassende if.

Houd een resultaat beschikbaar

Een variabele die binnen een blok is gedeclareerd, is alleen binnen dat blok zichtbaar. Declareer een resultaat vóór de takken als latere code het nodig heeft:

String ticket;
if (age >= 18) {
    ticket = "Adult ticket";
} else {
    ticket = "Youth ticket";
}
System.out.println(ticket);

Beide mogelijke paden wijzen een waarde toe aan ticket, dus die daarna afdrukken is geldig. Als alleen de tak voor waar een waarde zou toewijzen, zou Java het latere lezen afwijzen: de variabele is mogelijk niet geïnitialiseerd. Als je ticket afzonderlijk binnen elke tak zou declareren, zou er na de beslissing ook geen ticket beschikbaar zijn.

Plaats een beslissing binnen een andere

Een geneste if voert de test alleen uit als de uitvoering de omringende tak bereikt:

if (hasTicket) {
    if (age < 12) {
        System.out.println("Child seat");
    } else {
        System.out.println("Standard seat");
    }
} else {
    System.out.println("Buy a ticket first");
}

Iemand zonder kaartje bereikt de buitenste else; de leeftijdscontrole wordt overgeslagen. Als beide geneste tests alleen dezelfde actie bewaken en geen van beide een else heeft, kun je ze samenvoegen tot if (hasTicket && age < 12).

De regel voor de losse else koppelt een else aan de dichtstbijzijnde if zonder bijbehorende else. Zonder accolades verandert het visueel uitlijnen met een buitenste if die regel niet. Bij een buitenste test of x positief is, gevolgd door een binnenste test of y positief is, hoort de volgende else bij de test van y. Als de else bij de buitenste test moet horen, zijn accolades rond de volledige binnenste beslissing nodig.

Kies een waarde met ?:

De conditionele operator kiest één van twee waarden:

int n = 7;
String label = n % 2 == 0 ? "even" : "odd";

De voorwaarde is onwaar, dus de expressie geeft “odd”. De vorm is condition ? valueIfTrue : valueIfFalse. Gebruik de operator om kort een waarde te kiezen; gebruik een if als takken meerdere acties uitvoeren. Geneste conditionele expressies maken het gekozen pad al snel moeilijk te volgen.

Belangrijkste punten

  • Accolades groeperen alle instructies die bij een tak horen.
  • Een else hoort bij de dichtstbijzijnde if zonder bijbehorende else.
  • Een resultaat dat na een beslissing nodig is, moet binnen bereik zijn en een waarde hebben gekregen op elk pad dat het gebruik ervan bereikt.
  • ?: kiest een waarde uit twee expressies.

2.2 Geordende gevallen en grenswaarden

Een else if-keten test voorwaarden op volgorde en kiest de eerste die waar is. Zodra die tak wordt uitgevoerd, worden de overige voorwaarden overgeslagen. Een laatste else handelt de overgebleven waarden af; zonder die laatste tak kan het gebeuren dat de keten geen actie uitvoert.

Orden overlappende drempelwaarden

Test voor scores van 0 tot 100 eerst de hoogste beoordeling:

String grade;
if (score >= 90) {
    grade = "A";
} else if (score >= 80) {
    grade = "B";
} else if (score >= 70) {
    grade = "C";
} else if (score >= 60) {
    grade = "D";
} else {
    grade = "F";
}

Bij 85 faalt de eerste test en slaagt de tweede. Het programma wijst “B” toe zonder de overige drempelwaarden te controleren. Als score >= 80 wordt bereikt, betekent dit al dat de score onder 90 ligt, dus een extra bovengrens is niet nodig.

Als score >= 60 eerst zou staan, zou elke voldoende score “D” krijgen. Werk van het meest beperkende passende geval naar de ruimere gevallen. Deze volgorderegel is van belang omdat meerdere voorwaarden waar kunnen zijn, ook al wordt slechts één tak uitgevoerd.

Handel het gecombineerde geval eerst af

FizzBuzz heeft een speciaal geval waarin twee regels overlappen: veelvouden van zowel 3 als 5 hebben “FizzBuzz” nodig. Test dat geval vóór de afzonderlijke deelbaarheidstests:

if (n % 15 == 0) {
    System.out.println("FizzBuzz");
} else if (n % 3 == 0) {
    System.out.println("Fizz");
} else if (n % 5 == 0) {
    System.out.println("Buzz");
} else {
    System.out.println(n);
}

De test % 15 == 0 accepteert 30; 9 bereikt “Fizz”, 10 bereikt “Buzz” en 7 bereikt de laatste tak. Beginnen met % 3 == 0 zou 30 te vroeg accepteren en alleen “Fizz” afdrukken.

Kies één uitkomst of meerdere acties

Afzonderlijke if-instructies zijn onafhankelijke beslissingen. Met x = 15 kan een if (x > 10) “big” afdrukken en een daaropvolgende if (x > 0) ook “positive”. Als je ze met else if verbindt, is de tweede test onbereikbaar wanneer de eerste waar is. Gebruik onafhankelijke tests als beide acties nodig kunnen zijn; gebruik een keten voor één gekozen uitkomst.

Controleer grenswaarden en ongeldige waarden

Een keten voor gehele temperaturen met temp < 10, dan temp > 10 && temp < 25, dan temp >= 25 mist precies 10. Vervang de tweede test door temp < 25: als die wordt bereikt, betekent dit al dat de eerste test is mislukt, dus de waarde is minstens 10. Een laatste else handelt dan 25 en hoger af.

Probeer voor elke grens de waarde er vlak onder, de grens zelf en de waarde er vlak boven. Voor de scoreketen laten 89, 90 en 91 zien of de A-grens correct is opgenomen. Test ook de algemene grenzen.

Valideer een score voordat je die beoordeelt: plaats score < 0 || score > 100 eerst en meld daar “Invalid score”. Latere takken werken dan alleen met geldige scores; 150 kan niet per ongeluk “A” krijgen. Validatie is een afzonderlijk eerste geval, geen correctie nadat de beoordeling al is gekozen.

Belangrijkste punten

  • De eerste ware voorwaarde in een keten kiest de enige tak die wordt uitgevoerd.
  • Plaats beperktere overlappende gevallen vóór ruimere gevallen.
  • Gebruik afzonderlijke if-instructies als meerdere acties van toepassing kunnen zijn.
  • Test de waarden op en naast elke grens.
  • Wijs ongeldige invoer af voordat je geldige invoer indeelt.

2.3 Switch-cases en resultaten van expressies

Een switch kiest een case door één waarde met vaste labels te vergelijken. Dit past bij benoemde commando’s en genummerde keuzes. Gebruik een else if-keten als de keuze afhangt van een bereik of meerdere variabelen.

Vergelijk exacte waarden

Een switch op waarde accepteert selectiewaarden van de typen char, byte, short, int, de bijbehorende wrappertypen, String en enumtypen. Zonder experimentele functies worden selectiewaarden van de typen long, float, double en boolean niet ondersteund. Labels moeten constanten zijn: een voorwaarde zoals score >= 90 is geen waardelabel.

switch (day) {
    case 1, 2, 3, 4, 5 -> System.out.println("Weekday");
    case 6, 7 -> System.out.println("Weekend");
    default -> System.out.println("Invalid day");
}

Een case met een pijl voert alleen de eigen code uit, zonder door te vallen. Komma’s groeperen meerdere labels voor één actie. Een dag met waarde 6 drukt “Weekend” af; bij 9 komt geen vermelde waarde overeen en wordt “Invalid day” afgedrukt.

Stringlabels komen overeen bij een exacte, hoofdlettergevoelige inhoud. Een commando “Start” komt niet overeen met case "start". Een dubbel label is een compilatiefout en één switch kan cases met pijlen en cases met dubbele punten niet combineren.

Lever een waarde op

Een switch-expressie berekent een resultaat:

int days = switch (month) {
    case 1, 3, 5, 7, 8, 10, 12 -> 31;
    case 4, 6, 9, 11 -> 30;
    case 2 -> 28;
    default -> 0;
};

In een niet-schrikkeljaar geeft maand 9 de waarde 30, maand 2 de waarde 28 en de ongeldige maand 13 de waarde 0. De puntkomma na de afsluitende accolade beëindigt de variabeledeclaratie.

Een expressie moet volledig zijn: elke mogelijke selectiewaarde moet een resultaat hebben. Neem voor deze voorbeelden met int en String een default op. Een switch-instructie op waarde mag default weglaten; bij een waarde zonder overeenkomst wordt dan geen case uitgevoerd. Een expressie die een waarde oplevert, kan het opleveren van een resultaat niet zomaar overslaan.

Geef een blok een resultaat met yield

Een case die een berekening uitvoert voordat die een waarde kiest, heeft een blok nodig:

int days = switch (month) {
    case 2 -> {
        boolean leap = (year % 4 == 0 && year % 100 != 0)
                || year % 400 == 0;
        yield leap ? 29 : 28;
    }
    case 4, 6, 9, 11 -> 30;
    case 1, 3, 5, 7, 8, 10, 12 -> 31;
    default -> 0;
};

yield levert de waarde van de case aan de switch-expressie. Februari geeft 29 in 2024 en 28 in 2026. Een enkele expressie na een pijl, zoals case 2 -> 28;, heeft geen yield nodig.

Lees de oudere vorm met dubbele punten
switch (level) {
    case 1:
        System.out.println("Bronze");
    case 2:
        System.out.println("Silver");
        break;
    case 3:
        System.out.println("Gold");
        break;
}

Bij niveau 1 gaat de uitvoering de eerste case binnen en verder naar de tweede, waardoor zowel “Bronze” als “Silver” wordt afgedrukt. Dit is doorvallen: een label met een dubbele punt stopt de uitvoering niet. break beëindigt de switch. Opeenvolgende labels met dubbele punten kunnen bewust een actie delen; een ontbrekende break na een actie kan ervoor zorgen dat de volgende per ongeluk wordt uitgevoerd.

Een switch op een char kan 'a', 'e', 'i', 'o', 'u' groeperen tot een resultaat “vowel”, waarbij default “other” geeft. Hetzelfde principe van exacte waarden geldt voor tekens, commando’s en numerieke keuzes.

Belangrijkste punten

  • Gebruik switch voor vaste labels bij één selectiewaarde.
  • Cases met pijlen vallen niet door.
  • Een switch-expressie moet voor elke mogelijke selectiewaarde een resultaat opleveren.
  • Een case met een blok levert het resultaat voor de expressie met yield.
  • Een case met een dubbele punt kan zonder break doorvallen.
  • Stringcases vergelijken de inhoud exact en hoofdlettergevoelig.
3

Beheers herhaling en stoppen

Herhaling hangt af van zowel een voorwaarde als een verandering in de toestand van het programma. Volg een lus vanaf de beginwaarden langs de test, body en bijwerking om te zien wanneer die stopt. De drie lusvormen plaatsen deze onderdelen op verschillende plekken: vóór de body, erna of samen in een kop. Voortijdig verlaten en doorgangen overslaan bieden nuttige mogelijkheden, maar maken het ook belangrijk om de uitvoeringsvolgorde zorgvuldig te volgen.

3.1 Tests in while-lussen en veranderende toestand

Een while-lus test de voorwaarde vóór elke doorgang. Als de voorwaarde waar is, voert Java de body uit en keert terug naar de test. Als die onwaar is, gaat de uitvoering verder na de lus. Een onware eerste test betekent nul doorgangen.

Volg begin, test, body en bijwerking
int i = 1;
while (i <= 5) {
    System.out.println(i);
    i++;
}

De beginwaarde is 1. Elke doorgang drukt de huidige waarde af en verhoogt die daarna. De vijfde doorgang drukt 5 af en verandert i in 6. De volgende test is onwaar, dus de lus eindigt. De body wordt vijf keer uitgevoerd, maar de voorwaarde wordt zes keer getest: één keer vóór elke doorgang en een laatste onware test.

Een tellus heeft een beginwaarde nodig, een test en een bijwerking die naar het stoppen toe werkt. Laat je i++ weg, dan drukt deze lus oneindig 1 af. Een onbedoelde puntkomma is een andere valkuil: in while (i <= 5); is de lege instructie de body. Als i binnen het bereik begint, wordt het latere blok nooit bereikt en kan het de variabele niet bijwerken.

Stop als een grens wordt overschreden

Gelijkheid is vaak een kwetsbare stoptest. Als je bij 0 begint en 3 optelt, doorloop je 0, 3, 6, 9, 12, enzovoort. De test i != 10 kan niet opmerken dat 10 wordt overschreden, omdat 10 wordt overgeslagen. De test i < 10 eindigt na het verwerken van 9. Kies een grens die past bij de richting van de bijwerking.

Sommige lussen herhalen een onbekend aantal keren. Bijvoorbeeld:

int amount = 1;
int days = 0;
while (amount < 1000) {
    amount *= 2;
    days++;
}

Elke doorgang verdubbelt de hoeveelheid en telt één dag. Na negen doorgangen is de hoeveelheid 512; na tien is die 1024. Door de onware test bij 1024 blijft days gelijk aan 10. Een lus kan boven de drempelwaarde eindigen als de bijwerking grotere stappen neemt.

Lees voordat je beslist of je stopt
while (true) {
    String line = scanner.nextLine();
    if (line.equals("stop")) {
        break;
    }
    System.out.println("You wrote: " + line);
}

Hier is scanner de Scanner voor invoer. De lus leest een regel, controleert op “stop” en geeft alleen gewone regels weer. Het stopcommando wordt gelezen maar niet verwerkt. while (true) heeft een bereikbaar punt nodig waarop de lus wordt verlaten om te eindigen; een lus die blijft herhalen zonder te worden verlaten, is een oneindige lus.

Volg de veranderende toestand

Bekijk een product:

int n = 3;
int product = 1;
while (n > 0) {
    product *= n;
    n--;
}
Momentproductn
Vóór de lus13
Na doorgang 132
Na doorgang 261
Na doorgang 360

De vermenigvuldiging gebruikt de oude n en daarna volgt het decrement. Als je het decrement boven de vermenigvuldiging zou zetten, zouden andere waarden worden vermenigvuldigd.

Declareer een lopend resultaat vóór de lus, zodat het van doorgang tot doorgang behouden blijft. Een variabele die binnen de body is gedeclareerd, wordt opnieuw aangemaakt telkens wanneer de uitvoering de declaratie bereikt. Druk binnen de body af om tussenresultaten te zien; druk na de afsluitende accolade af om het eindresultaat één keer te tonen.

Belangrijkste punten

  • Een while-lus kan nul keer worden uitgevoerd.
  • Volg de voorwaarde vóór elke doorgang, inclusief de laatste onware test.
  • Tellussen hebben een bijwerking nodig die naar een stopgrens toe werkt.
  • Een stopcommando moet worden gecontroleerd voordat de invoer wordt verwerkt.
  • Houd lopende resultaten buiten de lusbody bij.

3.2 Invoercontroles met do-while

Een do-while-lus voert de body uit voordat wordt gecontroleerd of een volgende doorgang nodig is. Gebruik die als de eerste actie moet plaatsvinden, zoals het tonen van een menu of het vragen om een invoerwaarde.

Test na de eerste actie
int i = 10;
do {
    System.out.println(i);
    i++;
} while (i < 5);

De body drukt 10 af en verhoogt i naar 11. Pas dan test Java i < 5. Dat is onwaar, dus er is geen tweede doorgang. Een while (i < 5)-lus die bij 10 begint, zou niets afdrukken.

De puntkomma na de laatste while (...) is verplicht. Die sluit de do-while-instructie af. Dit verschilt van de onbedoelde puntkomma na de kop van een while met een vooraf geteste voorwaarde, die een lege lusbody maakt.

Herhaal zolang invoer ongeldig is
int rating;
do {
    System.out.print("Rating (1-5): ");
    rating = Integer.valueOf(scanner.nextLine());
} while (rating < 1 || rating > 5);

De vraag verschijnt vóór de eerste controle, zodat de gebruiker de waarde kan invoeren die wordt gecontroleerd. Bij invoer 7, dan 0 en dan 4 zijn de eerste twee voorwaarden waar en verschijnt de vraag opnieuw. De laatste voorwaarde is onwaar, dus de lus eindigt met rating gelijk aan 4.

De voorwaarde beschrijft doorgaan, niet accepteren. Een geldige beoordeling voldoet aan rating >= 1 && rating <= 5. De lus herhaalt zolang die uitspraak onwaar is, wat de wetten van De Morgan herschrijven als rating < 1 || rating > 5. Een EN-verbinding tussen deze buitengrenzen zou nooit waar zijn: één getal kan niet tegelijk onder 1 en boven 5 liggen.

Declareer de te controleren variabele vóór het blok

De afsluitende accolade beëindigt het bereik van de body voordat de voorwaarde wordt geëvalueerd. Een declaratie zoals int rating binnen het do-blok zou daarom niet beschikbaar zijn in de laatste voorwaarde. Declareer de variabele vóór do en wijs de invoer binnen de body toe. De toewijzing wordt altijd vóór de eerste test uitgevoerd.

Dezelfde plaatsing is van belang als de geaccepteerde waarde daarna wordt gebruikt. rating blijft na de hele lus binnen bereik en bevat nu de laatst gelezen waarde.

Houd een menu open
String choice;
do {
    System.out.println("a: show status, q: quit");
    choice = scanner.nextLine();
    if (choice.equals("a")) {
        System.out.println("Ready");
    }
} while (!choice.equals("q"));

Elke doorgang toont het menu en leest een keuze. Als je “a” invoert, wordt “Ready” afgedrukt en herhaalt de lus. Als je “q” invoert, wordt de actie overgeslagen en eindigt de lus bij de voorwaarde. Een onbekend commando leidt ook tot herhaling, omdat het geen “q” is.

Als de body geen continue bevat die op de lus betrekking heeft, kun je een do-while herschrijven als while (true) met onderaan een break op basis van de ontkende voorwaarde. Een continue vraagt bij zo’n herschrijving bijzondere aandacht: in de oorspronkelijke do-while springt die naar de voorwaarde, terwijl die in een while-true-lus naar boven springt en de toegevoegde test onderaan kan overslaan.

Belangrijkste punten

  • Een do-while-body wordt vóór de eerste test uitgevoerd.
  • De laatste puntkomma is verplicht.
  • Declareer een variabele buiten de body als de voorwaarde die nodig heeft.
  • Herhaal bij invoervalidatie zolang de waarde ongeldig is.

3.3 Bereiken en eindpunten van for-lussen

Een for-lus brengt de besturing van een teltaak samen in één kop. Die is nuttig als je het bereik of het aantal doorgangen kent voordat de herhaling begint.

Lees de kop in uitvoeringsvolgorde
for (int i = 1; i <= 5; i++) {
    System.out.println(i);
}

De initialisatie wordt één keer uitgevoerd en zet i op 1. Java test i <= 5, voert de body uit als de voorwaarde waar is, voert i++ uit en keert terug naar de test. De bijwerking staat in de kop, maar wordt na de body uitgevoerd. De laatste onware test beëindigt de lus.

Bij gewoon tellen hebben i++ en ++i op de plaats van de bijwerking hetzelfde effect, omdat de waarde van geen van beide expressies wordt gebruikt. Houd de wijzigingen van de teller in de kop, zodat de reeks gemakkelijk te voorspellen is.

Kies de eerste en laatste waarde
KopWaarden gebruikt door de bodyDoorgangen
int i = 0; i < 5; i++0 tot en met 45
int i = 0; i <= 5; i++0 tot en met 56
int i = 10; i >= 1; i--10 tot en met 110
int i = 0; i <= 20; i += 50, 5, 10, 15, 205

Bij opwaartse stappen van één, met een eindwaarde die minstens zo groot is als de beginwaarde, geeft een exclusieve eindgrens eindwaarde min beginwaarde doorgangen; een inclusieve eindgrens voegt er één toe. Bij grotere stappen moet je de werkelijk bereikte waarden opsommen of tellen. Een aftellende lus moet in de bijpassende richting testen: beginnen bij 10 met i <= 1 geeft nul doorgangen.

Een één-ernaastfout neemt één ongewenst eindpunt mee of laat er één weg. Om 1 tot en met 10 af te drukken, mist i < 10 de 10; gebruik i <= 10. Controleer de eerste en laatste waarde in de body en de eerste waarde die niet aan de voorwaarde voldoet.

Bouw een resultaat op over een bereik
int sum = 0;
for (int i = 1; i <= 100; i++) {
    sum += i;
}
System.out.println(sum);

De body telt elk geheel getal één keer op en eindigt met 5050. Een product begint anders: initialiseer product op 1 voordat je met 1 tot en met 5 vermenigvuldigt. Dat geeft 120; beginnen bij 0 zou het product na elke vermenigvuldiging op 0 laten.

Let op bereik en lege body’s

Een teller die in de kop is gedeclareerd, bestaat gedurende die lus, maar niet na de afsluitende accolade. Declareer de teller eerder als latere code de eindwaarde nodig heeft.

Een puntkomma direct na de kop is een lege body. In for (int i = 0; i < 3; i++); wordt de lege instructie drie keer uitgevoerd. Een volgend blok dat “Hello” afdrukt, wordt één keer na de lus uitgevoerd, niet drie keer. Accolades horen direct na de kop.

Elk onderdeel van de kop mag worden weggelaten. for (;;) { ... } heeft geen stopvoorwaarde en gedraagt zich als while (true); de lus heeft een manier om te stoppen nodig, zoals break.

Kies de duidelijkste lus
TaakBruikbare vormReden
Doorloop een bekend bereikforBegin, grens en stap staan bij elkaar.
Herhaal tot invoer of toestand verandertwhileDe test kan de eerste doorgang tegenhouden.
Vraag eerst en controleer daarnado-whileDe eerste uitvoering van de body is verplicht.

De vormen kunnen dezelfde herhaling uitdrukken, maar bij herschrijven moet de volgorde van tests en bijwerkingen behouden blijven, inclusief wat een continue overslaat.

Belangrijkste punten

  • Een for-lus voert de initialisatie één keer uit en daarna de test, body en bijwerking.
  • Controleer het begin, de laatste meegenomen waarde en het aantal doorgangen.
  • Een teller die in de kop is gedeclareerd, is na de lus niet beschikbaar.
  • Gebruik for voor bereiken, while voor een veranderende toestand en do-while voor een verplichte eerste doorgang.
  • Een puntkomma na een for-kop maakt een lege body.

3.4 Voortijdig verlaten en doorgangen overslaan

Door een lus voortijdig te verlaten, kun je de herhaling stoppen zodra de taak klaar is. Door een doorgang over te slaan, kun je ongewenst werk weglaten terwijl de lus doorgaat. Let goed op waar de uitvoering naartoe gaat: break en continue doen verschillende dingen.

Beëindig een zoekactie met break
for (int n = 51; n <= 100; n++) {
    if (n % 7 == 0) {
        System.out.println(n);
        break;
    }
}

De waarden 51 tot en met 55 voldoen niet aan de deelbaarheidstest. De volgende waarde, 56, wordt afgedrukt en break verlaat de lus direct. De bijwerking wordt na die break niet uitgevoerd. Zonder break zouden ook latere veelvouden zoals 63 en 70 worden afgedrukt.

Een break zonder label richt zich op de dichtstbijzijnde omringende lus of switch. De uitvoering gaat verder na die constructie, niet na het hele programma.

Sla over met continue
for (int i = 1; i <= 10; i++) {
    if (i % 3 == 0) {
        continue;
    }
    System.out.print(i + " ");
}

Voor 3, 6 en 9 slaat continue de afdrukinstructie over. In een for-lus wordt de bijwerking in de kop nog steeds uitgevoerd, gevolgd door de voorwaarde. De uitvoer bevat 1, 2, 4, 5, 7, 8 en 10.

Bij een while of do-while gaat continue naar de voorwaarde. Een eventuele bijwerking eronder in de body wordt overgeslagen. Als een while-teller bij 0 begint en de eerste actie if (i % 3 == 0) { continue; } is, wordt een i++ later in de body nooit bereikt. De teller blijft 0 en de lus herhaalt oneindig. Verplaats de vereiste bijwerking naar vóór elk pad dat wordt overgeslagen, of gebruik een for-kop om de bijwerking automatisch te laten verlopen.

Verlaat geneste lussen bewust

Een gewone break binnen een binnenste lus beëindigt alleen die binnenste lus. Met een label kun je een buitenste lus aanwijzen als doel om te verlaten:

outer:
for (int a = 1; a <= 10; a++) {
    for (int b = 1; b <= 10; b++) {
        if (a * b == 24 && a + b == 10) {
            System.out.println("Found " + a + " and " + b);
            break outer;
        }
    }
}

De zoekactie doorloopt paren op volgorde. Bij a = 4 en b = 6 slagen beide tests en verlaat de break met label beide lussen. continue outer zou in plaats daarvan naar de bijwerking van de buitenste lus en dan naar de volgende test gaan.

Onderscheid het verlaten van een switch van het verlaten van een lus

In een menulus met een switch met dubbele punten beëindigt break binnen een case de switch. Die beëindigt op zichzelf niet de omringende lus. Een duidelijk patroon zet in de case voor afsluiten een lusvlag op false en gebruikt vervolgens break om de switch te verlaten. De lus eindigt als de volgende voorwaardecontrole ziet dat de vlag onwaar is. Cases met pijlen hebben geen break nodig om doorvallen te voorkomen.

Een break zonder label is toegestaan binnen een lus of switch; continue is toegestaan binnen een lus. Als je ze elders plaatst, compileert de code niet. Houd de normale stopregel in de lusvoorwaarde als die daar past. Gebruik while (true) met een break als de stoptest van nature na het lezen van invoer maar vóór de verwerking ervan hoort. Meerdere punten om de lus te verlaten kunnen nuttig zijn, maar elk extra pad voegt toestand toe die je bij het volgen van de uitvoering moet bijhouden.

Belangrijkste punten

  • break verlaat het doel direct.
  • Bij continue in een for-lus wordt de bijwerking in de kop nog uitgevoerd.
  • continue in een while-lus kan een noodzakelijke bijwerking in de body overslaan.
  • Een gewone instructie om te stoppen heeft effect op de dichtstbijzijnde geschikte constructie.
  • Een break met label kan een buitenste lus verlaten.
  • Een break in een switch verlaat een omringende lus niet direct.
4

Bouw en controleer bruikbare lussen

Een lus wordt nuttig als die precies de informatie bijhoudt die een probleem nodig heeft: een aantal, een lopende som, een beste waarde of een vlag die een overeenkomst vastlegt. Door die kleine patronen te combineren, los je taken voor invoerverwerking en zoekacties op. Geneste lussen breiden herhaling uit naar rijen en kolommen. Volg de veranderende waarden, houd de toestand binnen het juiste bereik en gebruik lege invoer en grensgevallen om te controleren of het resultaat alle gegevens beschrijft.

4.1 Lopende aantallen, sommen en gemiddelden

Een teller houdt bij hoeveel waarden aan een voorwaarde voldoen. Een accumulator combineert waarden tot een lopend resultaat. Declareer beide vóór de lus, zodat elke doorgang voortbouwt op het eerdere werk.

Initialiseer voor de bewerking

Gebruik int count = 0; en verhoog de teller als een element voldoet. Een som begint bij 0 en gebruikt sum += value;. Een product begint bij 1, omdat vermenigvuldigen met een beginwaarde van 0 elke latere factor teniet zou doen. Als je een totaal binnen de body initialiseert, wordt het bij elke doorgang teruggezet.

Bij een bereik kan de stap van de lus de waarden selecteren: als je de even gehele getallen van 2 tot en met 100 in stappen van 2 optelt, krijg je 2550. Je kunt ook een voorwaarde binnen de lus plaatsen. Het aantal getallen van 1 tot en met 100 dat deelbaar is door 3 of door 5 is 47: de zes veelvouden van 15 mogen maar één keer worden geteld.

Stop vóór het optellen van de invoer

Een stopwaarde is een speciale invoerwaarde die het lezen beëindigt. Het is geen gewone gegevenswaarde:

int sum = 0;
int count = 0;
while (true) {
    int number = Integer.valueOf(scanner.nextLine());
    if (number == 0) {
        break;
    }
    sum += number;
    count++;
}

Bij de invoer 12, 7, 5, 0 verloopt de som via 12 en 19 naar 24. De teller bereikt 3. De laatste 0 activeert de break voordat een van beide variabelen verandert. Als je die meetelt, ontstaat een vierde element en krijg je een verkeerd gemiddelde, ook al verandert de som niet door nul op te tellen.

Deel pas nadat je het aantal hebt gecontroleerd
if (count > 0) {
    double average = (double) sum / count;
    System.out.println(average);
} else {
    System.out.println("No numbers entered");
}

Het voorbeeld drukt 8.0 af. Bij gehele operanden laat de deling het breukdeel vervallen: 25 / 4 is 6. Zet vóór het delen om om 6,25 te krijgen: (double) sum / count. Achteraf een expliciete typeconversie uitvoeren, (double) (sum / count), zet alleen het al afgekapt resultaat om naar 6,0.

Als de stopwaarde als eerste komt, is het aantal 0. Geheeltallige deling door nul werpt een ArithmeticException op; een zwevendekommasom van nul gedeeld door nul geeft NaN. De controle van het aantal voorkomt dat lege invoer een betekenisloos gemiddelde oplevert.

Houd meerdere resultaten bij in één doorgang

Voor de scores 55, 72, 90, 48 en 81 levert een slaaggrens van 60 vijf scores en drie voldoendes op. Houd een totaalteller bij voor elke score en een teller voor voldoendes binnen de voorwaarde voor slagen. 100.0 * passed / total geeft 60,0 procent; door 100.0 wordt met zwevendekommagetallen gerekend. Controleer ook vóór deze deling of het totaal positief is.

De plaats waar je afdrukt, verandert wat wordt getoond. Afstanden van 5, 3 en 8 km geven lopende totalen van 5, 8 en 16 km als je die binnen de lus na het optellen afdrukt. Als je daarna afdrukt, krijg je alleen de uiteindelijke 16 km.

Kies een type dat groot genoeg is voor het totaal

Het maximum van een int is 2.147.483.647. Alle gehele getallen van 1 tot en met 100.000 optellen zou 5.000.050.000 moeten opleveren, maar een int springt zonder foutmelding naar 705.082.704. long sum = 0; bevat deze som correct; het maximum van long is ongeveer 9,2 × 10¹⁸. Als je een resultaat dat al is overgelopen achteraf via een verbredende typeconversie omzet, kun je de verloren waarde niet herstellen.

Belangrijkste punten

  • Initialiseer een som of teller op 0 en een product op 1.
  • Laat de stopwaarde buiten zowel de som als de telling.
  • Zet een operand vóór de deling om om het breukdeel te behouden.
  • Bescherm berekeningen van gemiddelden en percentages tegen lege invoer.
  • Plaats de bijwerking van elke teller bij de voorwaarde waarvoor die telt.
  • Gebruik een type met voldoende bereik voordat je een groot totaal opbouwt.

4.2 Beste waarden, zoekacties en cijfers

Sommige lussen onthouden een beste waarde; andere onthouden of er een overeenkomst is gevonden. Kies de begintoestand zo dat die vóór en na elke doorgang klopt.

Houd de beste waarde tot dan toe bij

Om een maximum bij te houden, vervang je het alleen als de huidige waarde groter is: if (value > max) { max = value; }. Als je met de eerste meting begint, leveren de temperaturen 14, 19, 11, 23 en 17 °C achtereenvolgens de maxima 14, 19, 19, 23 en 23 °C op. Een minimum gebruikt in plaats daarvan <.

Een maximum bij 0 laten beginnen werkt niet als alle gegevens negatief zijn: -5, -2 en -9 zouden ten onrechte 0 als resultaat overlaten. Initialiseer vanuit een werkelijke meting, of begin met Integer.MIN_VALUE voor een int-maximum en Integer.MAX_VALUE voor een int-minimum. Meld dat er geen resultaat is als er geen metingen waren.

Om een positie vast te leggen, werk je die bij in dezelfde tak als de waarde. Een strikte > behoudt bij gelijke waarden het eerste maximum; >= vervangt het opnieuw en behoudt het laatste.

Stop nadat je een overeenkomst hebt gevonden
int n = 1;
while (n * n <= 500) {
    n++;
}

Bij 22 is het kwadraat 484, dus volgt nog een doorgang. Bij 23 is het 529 en voldoet de voorwaarde niet meer. De lus heeft het kleinste positieve gehele getal gevonden waarvan het kwadraat groter is dan 500. Een begrensde zoekactie kan in plaats daarvan elke kandidaat in een for-lus testen en bij de eerste overeenkomst stoppen met break.

Voor een vraag of een waarde voldoet, begin je met een onware vlag en maak je die waar bij een overeenkomst. Voor een vraag of alle waarden voldoen, begin je met waar en maak je de vlag onwaar bij een tegenvoorbeeld. Zet de vlag bij latere waarden niet terug in een else-tak: een latere waarde die niet overeenkomt, maakt bijvoorbeeld een eerdere negatieve meting niet ongedaan.

Test op een deler

Een priemgetal is minstens 2 en heeft geen deler van 2 tot en met één minder dan het getal zelf. Voor een klein positief geheel getal test een kortere controle delers slechts tot en met de vierkantswortel:

int n = 91;
boolean isPrime = n >= 2;
for (int d = 2; d * d <= n; d++) {
    if (n % d == 0) {
        isPrime = false;
        break;
    }
}

Twee factoren van een getal kunnen niet allebei groter zijn dan de vierkantswortel. Voor 91 geeft deler 7 een rest van nul en verandert de vlag in onwaar. Voor 97 deelt geen deler van 2 tot en met 9 het getal zonder rest, dus blijft de vlag waar. Waarden onder 2 beginnen met een onware vlag. Gebruik voor grote positieve int-waarden d <= n / d om overloop in d * d te voorkomen.

Verwijder één decimaal cijfer per doorgang

Voor een niet-negatief geheel getal haalt % 10 het laatste cijfer op en verwijdert de geheeltallige deling / 10 dat cijfer:

int n = 4072;
int sum = 0;
while (n > 0) {
    sum += n % 10;
    n /= 10;
}

De cijfers zijn 2, 7, 0 en 4, wat 13 oplevert. De gebruikte n eindigt op 0. Om de cijfers om te keren, werk je reversed = reversed * 10 + n % 10; bij voordat je het cijfer verwijdert; 1234 wordt 4321 als het resultaat in het gekozen type past.

Om cijfers te tellen, heeft nul één doorgang nodig, ook al is n > 0 aan het begin onwaar. Gebruik een do-while die de teller verhoogt en n door 10 deelt. Die telt één cijfer voor 0 en het gebruikelijke aantal voor positieve waarden.

Belangrijkste punten

  • Initialiseer een uiterste waarde vanuit echte gegevens of een passende typegrens.
  • Werk de positie van een uiterste waarde samen met de waarde bij.
  • Houd een zoekvlag waar na een gevonden overeenkomst, of onwaar na een tegenvoorbeeld bij een test voor alle waarden.
  • Een priemgetaltest heeft geen delers boven de vierkantswortel nodig.
  • Voor niet-negatieve gehele getallen haalt % 10 een cijfer op en verwijdert / 10 het.
  • Om de cijfers van nul te tellen, is een eerste doorgang verplicht.

4.3 Geneste lussen, traceertabellen en testgevallen

Geneste lussen herhalen een volledige herhaling voor elke buitenste doorgang. Ze zijn nuttig voor rijen, kolommen, tabellen en vormen. De binnenste lus moet opnieuw beginnen telkens wanneer de buitenste lus die bereikt.

Druk een rij af en beëindig dan de regel
for (int row = 1; row <= 3; row++) {
    for (int col = 1; col <= 5; col++) {
        System.out.print(row * col + "\t");
    }
    System.out.println();
}

De eerste rij bevat 1, 2, 3, 4, 5; de tweede bevat 2, 4, 6, 8, 10; de derde bevat 3, 6, 9, 12, 15. De print binnen de lus maakt kolommen op één regel; de println na de binnenste lus beëindigt die rij. Als je println binnen de binnenste lus zet, komt elk product op een eigen regel.

Bij vaste aantallen vermenigvuldig je het aantal buitenste doorgangen met het aantal binnenste doorgangen. Drie buitenste doorgangen en vier binnenste doorgangen voeren de binnenste body 12 keer uit. In de tabel hierboven worden drie keer vijf, ofwel 15, producten afgedrukt.

Laat de rijgrootte veranderen
for (int row = 1; row <= 4; row++) {
    for (int col = 1; col <= row; col++) {
        System.out.print("*");
    }
    System.out.println();
}

De binnenste grens hangt nu af van de rij. De aantallen zijn 1, 2, 3 en 4, dus de driehoek bevat 10 sterren. Eén vermenigvuldiging van vaste aantallen zou verkeerd zijn, omdat de binnenste lus niet op elke rij even vaak wordt uitgevoerd.

Gebruik verschillende namen voor lustellers waarvan het bereik overlapt. Een tweede int i declareren binnen een lus waarin i al binnen bereik is, levert een compilatiefout op. Initialiseer bij een binnenste while-lus de teller aan het begin van elke buitenste doorgang. Als je die alleen vóór de buitenste lus initialiseert, blijft de teller na de eerste rij voorbij de grens staan.

Volg waarden op een vast moment

Trek voor een lus van 1 tot en met 4 oneven waarden af van een totaal dat bij 0 begint en tel even waarden op:

Verwerkte waardeActieTotaal na de doorgang
1Trek 1 af-1
2Tel 2 op1
3Trek 3 af-2
4Tel 4 op2

Leg vast of een rij het begin of het einde van een doorgang beschrijft. Neem bij het controleren of de lus eindigt ook de laatste mislukte voorwaardetest mee. Een traceertabel die waarden van vóór en na de bijwerking door elkaar gebruikt, kan een correcte lus fout laten lijken.

Zet scheidingstekens tussen elementen

Vijf getallen hebben vier komma’s nodig. Druk vóór elk element behalve het eerste een scheidingsteken af:

for (int i = 1; i <= 5; i++) {
    if (i > 1) {
        System.out.print(", ");
    }
    System.out.print(i);
}

De uitvoer is “1, 2, 3, 4, 5”, zonder komma aan het begin of einde. Dit is een hekpalenprobleem: het aantal tussenruimten verschilt van het aantal elementen.

Test gevallen die fouten blootleggen

Probeer nul doorgangen, één doorgang en de waarden op en naast elke grens. Probeer bij invoerlussen eerst de stopwaarde. Controleer bij geneste lussen of de tweede rij correct opnieuw begint. Tijdelijk afdrukken van de lusvariabelen laat de werkelijke voortgang zien. Als een programma blijft hangen, controleer dan elk pad op een bijwerking of uitgang en stop het met Ctrl+C in een terminal of met de stopknop van de ontwikkelomgeving.

Belangrijkste punten

  • De binnenste lus wordt voor elke buitenste doorgang volledig uitgevoerd.
  • Vermenigvuldig aantallen doorgangen alleen als beide aantallen vaststaan.
  • Zet een teller van een binnenste while-lus bij elke buitenste doorgang terug.
  • Plaats de regelafbreking van een rij na de bijbehorende binnenste lus.
  • Gebruik voor de rijen van een traceertabel een vast moment in elke doorgang.
  • Test nul doorgangen, één doorgang en beide kanten van een grens.
  • Scheidingstekens staan tussen elementen, dus hun aantal is één kleiner.

Voorwaarden en lussen in Java: voorbeelden

4 Walkthroughs

1

Zet een programmaregel om in een voorwaarde

12 stappen
Bouw vergelijkingen, combineer die en controleer zowel hun waarheidswaarden als hun evaluatievolgorde.
  1. 1
    IntroductieBegin met een regel over gegevens

    Een voorwaarde beantwoordt één vraag over de huidige gegevens met waar of onwaar. Begin met eenvoudige vergelijkingen en combineer die tot een regel die precies de bedoelde waarden accepteert.

    We controleren een temperatuurbereik, vergelijken tekst en beveiligen een geheeltallige deling. Maak bij elke stap onderscheid tussen wat de voorwaarde betekent en de volgorde waarin Java die evalueert.

  2. 2
    UitlegGeef een vergelijking een naam

    Een vergelijking levert een boolean op, die je kunt opslaan voor later gebruik.

    int age = 17;
    boolean isAdult = age >= 18;
    

    Hier slaat isAdult false op. De expressie if (isAdult) test die waarde later direct. Een los geheel getal kan niet als voorwaarde dienen: if (age) werkt niet omdat Java een booleaanse waarde vereist, geen getal dat als waarheidswaarde dient.

  3. 3
    VoorbeeldLees de operator nauwkeurig

    Met a = 7 en b = 10 is a < b waar en a >= b onwaar. De vergelijkingen a != b en a == 7 zijn waar.

    Het verschil tussen = en == is belangrijk: een toewijzing verandert een variabele, terwijl een vergelijking een vraag stelt. Voor een booleaanse waarde compileert if (done = true), maar overschrijft de vlag voordat die wordt getest. Gebruik if (done) om de bestaande waarde te testen.

  4. 4
    TipVergelijk de tekens in invoer

    Een string die niet null is, zoals command, heeft tekstinhoud en een objectidentiteit. command.equals("quit") test de tekens; command == "quit" test de identiteit.

    Gebruik equalsIgnoreCase alleen als verschillen tussen hoofdletters en kleine letters moeten worden geaccepteerd. Zo komen “Quit” en “quit” met die methode overeen, maar verschillen ze volgens equals. Een exacte overeenkomst ontkennen geeft !command.equals("quit").

  5. 5
    VoorbeeldControleer een decimaal verschil
    double sum = 0.1 + 0.2;
    boolean close = Math.abs(sum - 0.3) < 1e-9;
    

    De som wordt opgeslagen als 0.30000000000000004. Exacte gelijkheid met 0.3 is onwaar, maar het absolute verschil ligt onder deze tolerantie, waardoor close waar is. De tolerantietest accepteert een klein verschil; die verandert geen van beide opgeslagen waarden en maakt ze niet exact gelijk.

  6. 6
    UitdagingTest een negatief oneven getal

    Een programma gebruikt n % 2 == 1 om oneven gehele getallen te herkennen. Wat mist het als n -11 is en hoe kun je de test herstellen?

    ---reveal---

    -11 % 2 is -1, dus de test is onwaar, ook al is -11 oneven. Gebruik n % 2 != 0: bij deelbaarheid door 2 is de rest nul en zowel positieve als negatieve resten die niet nul zijn, wijzen op oneven gehele getallen.

  7. 7
    UitlegVereis beide grenzen

    Om temperaturen van 18 tot en met 24 °C te accepteren, vereis je beide vergelijkingen: temp >= 18 && temp <= 24.

    Bij 21 zijn beide waar. Bij 17 is de eerste onwaar; bij 25 is de tweede onwaar. Als je || tussen deze binnengrenzen gebruikt, worden alle drie de waarden geaccepteerd, omdat elke waarde aan minstens één van de twee tests voldoet. Elke operand moet een volledige booleaanse expressie zijn.

  8. 8
    KernpuntKeer het hele bereik om

    Buiten hetzelfde bereik betekent temp < 18 || temp > 24. Eén grens overschrijden is genoeg om buiten het bereik te liggen.

    Dit is de wet van De Morgan in de praktijk: !(p && q) is gelijk aan !p || !q. Als je beide delen ontkent, verandert ook de verbindende operator. De bijbehorende wet is !(p || q) is gelijk aan !p && !q; als je de oude verbinding behoudt, verandert welke invoer wordt geaccepteerd.

  9. 9
    VoorbeeldPlaats een beveiligende voorwaarde vóór een deling
    int total = 36;
    int count = 0;
    boolean large = count != 0 && total / count > 10;
    

    De onware eerste vergelijking bepaalt het resultaat, dus && slaat de deling over. Dit is kortsluitevaluatie. Als je de operanden omdraait, wordt vóór de controle van count door nul gedeeld en een ArithmeticException opgeworpen. Bij || slaat een ware linkeroperand op dezelfde manier de rechteroperand over.

  10. 10
    UitdagingOnderscheid groepering van leesvolgorde

    Geven a || b && c en (a || b) && c met a = true, b = false en c = false hetzelfde resultaat? Leg de groepering uit.

    ---reveal---

    Nee. De eerste wordt gegroepeerd als a || (b && c) omdat && een hogere prioriteit heeft, dus die is waar. De tweede vereist het resultaat van a || b en ook c; omdat c onwaar is, is dat resultaat onwaar.

  11. 11
    UitdagingCombineer een grens en een uitzondering

    Een belasting wordt geaccepteerd als die van 6 tot en met 14 kg is of als een handmatige vrijgave actief is, maar een geheeltallige berekening 100 / count > 5 moet ook veilig kunnen slagen. Schrijf de voorwaarde zo dat count 0 de deling niet kan bereiken.

    ---reveal---

    count != 0 && (load >= 6 && load <= 14 || override) && 100 / count > 5

    De eerste beveiligende voorwaarde wijst nul af. De gegroepeerde keuze accepteert het bereik of de vrijgave; alleen een pad dat doorgaat bereikt de deling.

  12. 12
    SamenvattingControleer een voorwaarde van beide kanten

    Probeer voordat je een voorwaarde gebruikt een invoer die moet slagen en één die moet falen. Controleer bij intervallen ook de eindpunten.

    Lees haakjes en operatorprioriteit om de groepering te bepalen en volg daarna de kortsluitevaluatie van links naar rechts. Zo vind je zowel een verkeerde acceptatieregel als een berekening die vóór de beveiligende voorwaarde wordt uitgevoerd.

2

Kies één pad en lever een resultaat op

14 stappen
Volg blokken, orden overlappende gevallen en gebruik switch-expressies voor keuzes op exacte waarden.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieVolg het pad dat Java bereikt
  2. 2
    VoorbeeldVoer precies één tak uit
  3. 3
    UitlegBehoud het resultaat na de beslissing
  4. 4
    UitdagingVind een onvoorwaardelijke afdrukinstructie
  5. 5
    TipMaak de binnenste keuze expliciet
  6. 6
    VoorbeeldDoorloop drempelwaarden in de juiste volgorde
  7. 7
    VerbandHoud onafhankelijke acties apart
  8. 8
    UitdagingHerstel een ontbrekend eindpunt
  9. 9
    UitlegKies op basis van één exacte waarde
  10. 10
    VoorbeeldWijs de gekozen waarde toe
  11. 11
    UitlegGeef een blok zijn waarde
  12. 12
    UitdagingVolg het doorvallen bij dubbele punten
  13. 13
    UitdagingKies een structuur voor een gecombineerde regel
  14. 14
    SamenvattingOnderzoek de beslissingsgrenzen
3

Volg een lus van de eerste doorgang tot het verlaten ervan

18 stappen
Volg lussen met een vooraf of achteraf geteste voorwaarde, getelde herhaling, overgeslagen doorgangen en het verlaten van lussen met een label.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieBekijk hoe de toestand verandert
  2. 2
    UitlegTest voordat je de lus binnengaat
  3. 3
    VoorbeeldVolg een veranderend product
  4. 4
    UitdagingVoorkom dat een stopwaarde wordt overgeslagen
  5. 5
    UitlegVoer één keer uit voordat je beslist
  6. 6
    VoorbeeldLees een beoordeling voordat je die test
  7. 7
    UitdagingVoorspel een geaccepteerd eindpunt
  8. 8
    VerbandVerplaats het tellen naar de kop
  9. 9
    VoorbeeldTel met stappen groter dan één
  10. 10
    UitdagingBehoud het bedoelde eindpunt
  11. 11
    TipControleer op een lege body
  12. 12
    VoorbeeldStop bij de eerste overeenkomst
  13. 13
    UitlegSla de rest van één doorgang over
  14. 14
    UitdagingZoek de overgeslagen bijwerking
  15. 15
    UitlegGeef een buitenste lus een label om die te verlaten
  16. 16
    VerbandHoud het verlaten van switch en lus uit elkaar
  17. 17
    UitdagingCombineer overslaan en voortijdig verlaten
  18. 18
    SamenvattingVolg waar de uitvoering hierna naartoe gaat
4

Bouw resultaten die alle verwerkte gegevens beschrijven

19 stappen
Combineer tellers, extrema, vlaggen, cijfers en geneste lussen en controleer hun toestand met traceertabellen en randgevallen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieBepaal wat een doorgang moet overleven
  2. 2
    UitlegHoud een telling en een som uit elkaar
  3. 3
    VoorbeeldLees de stopwaarde en sluit die uit
  4. 4
    VoorbeeldVolg de toestand tijdens de invoer
  5. 5
    UitlegBehoud het breukdeel van het gemiddelde
  6. 6
    UitdagingBereken het gemiddelde van alleen geaccepteerde metingen
  7. 7
    TipGebruik tijdig een type met voldoende bereik
  8. 8
    VoorbeeldBehoud de beste meting
  9. 9
    UitdagingLeg vast waar gelijke maxima voorkomen
  10. 10
    KernpuntLaat een vlag een overeenkomst onthouden
  11. 11
    UitlegZoek een deler
  12. 12
    VoorbeeldHaal cijfers in een vaste volgorde uit een getal
  13. 13
    UitdagingBlijf een negatieve meting onthouden
  14. 14
    UitlegVoltooi elke rij voordat je verdergaat
  15. 15
    VoorbeeldTel veranderende rijgroottes
  16. 16
    UitdagingCorrigeer een scheidingsteken bij het eerste element
  17. 17
    TipKies verhelderende rijen voor een traceertabel
  18. 18
    UitdagingCombineer een veranderende grens met selectie
  19. 19
    SamenvattingControleer de betekenis van elk resultaat

Voorwaarden en lussen in Java: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Lees voorwaarden en kies een pad10 Oefenvragen

Vraag 1 van 10

Wat is de waarde van -13 % 2 != 0?
  1. false
  2. true
  3. -1
  4. 1
Toon antwoordVerberg antwoord
Antwoord: B
De rest van -13 gedeeld door 2 is -1, en -1 met nul vergelijken met != levert true op. De eindwaarde is een booleaanse waarde, niet de rest zelf. Een test op een rest gelijk aan 1 zou negatieve oneven getallen missen, omdat hun rest negatief is.

Vraag 2 van 10

Een String command die niet null is, bevat tekst die uit invoer is gelezen. Welke expressie test of de inhoud precies “pause” is?
  1. command == "pause"
  2. command.equalsIgnoreCase("pause")
  3. !command.equals("pause")
  4. command.equals("pause")
Toon antwoordVerberg antwoord
Antwoord: D
De methode equals vergelijkt de tekens en hun hoofdlettergebruik en accepteert dus precies “pause”. De gelijkheidsoperator vergelijkt bij strings de objectidentiteit. Als je geen onderscheid maakt tussen hoofdletters en kleine letters, wordt ook tekst zoals “PAUSE” geaccepteerd, wat de vraag uitsluit.

Vraag 3 van 10

Welke voorwaarde accepteert een massa van 4 tot en met 9 kg, inclusief beide eindpunten?
  1. mass >= 4 && mass <= 9
  2. mass > 4 && mass < 9
  3. mass >= 4 || mass <= 9
  4. mass < 4 || mass > 9
Toon antwoordVerberg antwoord
Antwoord: A
Beide grenzen moeten gelden, dus de vergelijking heeft && met inclusieve operatoren nodig. Als je deze grenzen met || verbindt, wordt elke numerieke massa geaccepteerd omdat minstens één grens altijd geldt; strikte ongelijkheden zouden 4 en 9 kg ten onrechte uitsluiten.

Vraag 4 van 10

Wat wordt afgedrukt?

boolean ready = true;
boolean locked = false;
boolean expired = false;
System.out.println(ready || locked && expired);
  1. false
  2. true false
  3. true
  4. false false
Toon antwoordVerberg antwoord
Antwoord: C
De operator && groepeert locked met expired voordat || dat resultaat combineert met ready. Omdat ready true is, is de hele voorwaarde true en wordt de rechterkant overgeslagen. Als je de expressie als (ready || locked) && expired zou behandelen, zou je ten onrechte false krijgen.

Vraag 5 van 10

Wat drukt deze code af?

int stock = 0;
if (stock > 0) {
    System.out.print("available ");
} else {
    System.out.print("empty ");
}
System.out.print("checked");
  1. “available checked”
  2. “empty checked”
  3. “empty”
  4. “available empty checked”
Toon antwoordVerberg antwoord
Antwoord: B
De vergelijking van stock is onwaar, dus alleen het else-blok wordt uitgevoerd en drukt “empty ” af. De laatste afdrukinstructie staat buiten beide blokken en voegt altijd “checked” toe. Als je de uitvoer bij “empty” laat eindigen, zie je de instructie over het hoofd die na de beslissing wordt bereikt.

Vraag 6 van 10

Wat wordt afgedrukt?

int load = 74;
if (load >= 50) {
    System.out.print("medium");
} else if (load >= 70) {
    System.out.print("high");
} else {
    System.out.print("low");
}
  1. “medium”
  2. “high”
  3. “mediumhigh”
  4. “low”
Toon antwoordVerberg antwoord
Antwoord: A
De eerste vergelijking is voor 74 al waar, dus de keten drukt “medium” af en slaat de rest over. Een latere, beperktere drempelwaarde vervangt een eerdere overeenkomst niet. Om 70 en hoger als “high” in te delen, plaats je die test vóór de drempelwaarde 50.

Vraag 7 van 10

Welke waarde wordt in mode opgeslagen?

String command = "RUN";
int mode = switch (command) {
    case "run" -> 1;
    case "wait" -> 2;
    default -> 3;
};
  1. 1
  2. 2
  3. 0
  4. 3
Toon antwoordVerberg antwoord
Antwoord: D
Bij het vergelijken van String-cases wordt onderscheid gemaakt tussen hoofdletters en kleine letters, dus “RUN” komt niet overeen met “run” of “wait”. De default-case levert 3. Voor resultaat 1 is een exacte overeenkomst met kleine letters nodig; een switch op een String negeert hoofdlettergebruik niet automatisch.

Vraag 8 van 10

Wat gebeurt er met int sum = 15; en int count = 0; bij het evalueren van count == 0 || sum / count > 4?
  1. De uitkomst is false zonder deling.
  2. De uitkomst is true zonder deling.
  3. Er wordt een ArithmeticException opgeworpen.
  4. De uitkomst is true na een deling.
Toon antwoordVerberg antwoord
Antwoord: B
De linkervergelijking is waar en bepaalt daarmee de uitkomst van een ||-expressie, dus Java slaat de rechteroperand over. Er vindt geen deling plaats. Deling door nul zou bij evaluatie een probleem zijn, maar kortsluitevaluatie voorkomt dat in deze volgorde.

Vraag 9 van 10

Waarom compileert deze code niet?

int value = 8;
String label;
if (value > 5) {
    label = "large";
}
System.out.println(label);
  1. label valt buiten het gedeclareerde bereik.
  2. Een if kan geen stringwaarde toewijzen.
  3. label krijgt niet op elk pad een waarde.
  4. De vergelijking moet >= gebruiken.
Toon antwoordVerberg antwoord
Antwoord: C
De variabele is gedeclareerd in het omringende bereik, maar Java kan niet vaststellen dat op elk pad naar de afdrukinstructie een waarde wordt toegewezen. Door de ontbrekende else is er mogelijk een pad zonder toewijzing. Door label buiten de if te declareren, is het bereik correct, maar daarmee wordt de variabele niet automatisch geïnitialiseerd.

Vraag 10 van 10

Een programma staat toegang toe als member && !blocked || guest && codeValid waar is. Welke voorwaarde wijst precies de toegang af die het programma zou toestaan?
  1. (!member || blocked) && (!guest || !codeValid)
  2. (!member && blocked) || (!guest && !codeValid)
  3. (!member || blocked) || (!guest || !codeValid)
  4. (!member && blocked) && (!guest && !codeValid)
Toon antwoordVerberg antwoord
Antwoord: A
Groepeer eerst de twee termen met && en ontken daarna de buitenste || tot &&. Door elke binnenste && te ontkennen, verandert die in || en worden de operanden ontkend. Als je de vlaggen ontkent maar de verbindingen behoudt, wijs je niet precies de oorspronkelijk geaccepteerde gevallen af.
Set 2: Volg tests, bijwerkingen en het verlaten van lussen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Hoe vaak wordt de body uitgevoerd?

int n = 12;
while (n < 8) {
    n++;
}
  1. 1 keer
  2. 4 keer
  3. 0 keer
  4. 5 keer
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat wordt afgedrukt?

int level = 9;
do {
    level -= 2;
} while (level > 8);
System.out.println(level);
  1. 7
  2. 9
  3. 8
  4. 5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Hoe vaak wordt de body uitgevoerd?

for (int k = 2; k <= 17; k += 4) {
    System.out.println(k);
}
  1. 3
  2. 5
  3. 6
  4. 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Wat wordt afgedrukt als je de laatste spatie negeert?

for (int k = 2; k <= 7; k++) {
    if (k % 2 == 0) {
        continue;
    }
    System.out.print(k + " ");
}
  1. “2 4 6”
  2. “3 5 7”
  3. “3”
  4. “3 4 5 6 7”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat zijn amount en steps na deze lus?

int amount = 3;
int steps = 0;
while (amount < 40) {
    amount *= 2;
    steps++;
}
  1. amount = 24, steps = 3
  2. amount = 40, steps = 4
  3. amount = 48, steps = 5
  4. amount = 48, steps = 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat is de eindwaarde van total?

int total = 0;
for (int k = 1; k <= 8; k++) {
    if (k % 3 == 0) {
        continue;
    }
    total += k;
    if (total > 12) {
        break;
    }
}
  1. 12
  2. 13
  3. 19
  4. 15
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een do-while-lus leest een geheel getal van 2 tot en met 6. Welke voorwaarde laat de lus precies zolang herhalen als de waarde ongeldig is?
  1. value < 2 || value > 6
  2. value >= 2 && value <= 6
  3. value < 2 && value > 6
  4. value <= 2 || value >= 6
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een for-kop declareert int index. Waar kan code die variabele lezen?
  1. Overal in de main-methode.
  2. Alleen in de bijwerking in de kop.
  3. Alleen nadat de lus is geëindigd.
  4. Alleen binnen die for-lus.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat wordt afgedrukt?

int hits = 0;
outer:
for (int row = 1; row <= 4; row++) {
    for (int col = 1; col <= 4; col++) {
        if (row + col == 5) {
            break outer;
        }
        hits++;
    }
}
System.out.println(hits);
  1. 6
  2. 3
  3. 9
  4. 12
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Waarom eindigt deze lus nooit?

int n = 1;
while (n != 12) {
    n += 2;
}
  1. De bijwerking maakt n elke doorgang kleiner.
  2. De voorwaarde wordt maar één keer getest.
  3. De reeks blijft oneven en slaat 12 over.
  4. De body zet n elke doorgang terug op 1.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Bereken resultaten over herhaalde invoer10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Welke beginwaarde moet een accumulator gebruiken voordat die de gehele getallen van 2 tot en met 6 vermenigvuldigt?
  1. 0
  2. 2
  3. 6
  4. 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een lus leest 9, 4, 8 en dan stopwaarde -1. De lus controleert de stopwaarde voordat sum en count worden bijgewerkt. Welk gemiddelde moet die melden?
  1. 5.0
  2. 7.0
  3. 5.25
  4. 6.666666666666667
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat levert (double) (sum / count) op met int sum = 17; en int count = 4;?
  1. 4.25
  2. 4.5
  3. 4.0
  4. 5.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een lus die een maximum zoekt, verwerkt alleen negatieve gehele getallen. Waarom kan initialisatie van max op 0 een verkeerd antwoord geven?
  1. Geen negatieve invoer kan die beginwaarde vervangen.
  2. Elke negatieve invoer zal die beginwaarde vervangen.
  3. Nul verhindert dat de invoerlus begint.
  4. Negatieve gehele getallen vergelijken veroorzaakt overloop.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat wordt afgedrukt?

int n = 6205;
int sum = 0;
while (n > 0) {
    sum += n % 10;
    n /= 10;
}
System.out.println(sum);
  1. 12
  2. 56
  3. 13
  4. 5026
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Hoeveel sterren worden in totaal afgedrukt?

for (int row = 2; row <= 5; row++) {
    for (int col = 1; col < row; col++) {
        if (col == 2) {
            continue;
        }
        System.out.print("*");
    }
}
  1. 6
  2. 9
  3. 10
  4. 7
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Wat zijn best en position daarna?

int best = Integer.MIN_VALUE;
int position = 0;
for (int day = 1; day <= 5; day++) {
    int value = day % 3 - 4;
    if (value >= best) {
        best = value;
        position = day;
    }
}
  1. best = -2, position = 2
  2. best = -2, position = 5
  3. best = -3, position = 4
  4. best = -4, position = 3
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een lus telde 7 geaccepteerde metingen op een totaal van 12 metingen. Welke expressie berekent het geaccepteerde percentage met een breukdeel?
  1. 100.0 * accepted / total
  2. accepted / total * 100.0
  3. (double) (accepted / total) * 100
  4. (double) (100 * (accepted / total))
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Wat is de uitvoer?

for (int k = 3; k <= 5; k++) {
    if (k > 3) {
        System.out.print(", ");
    }
    System.out.print(k);
}
  1. “, 3, 4, 5”
  2. “3, 4, 5, ”
  3. “3, 4, 5”
  4. “345”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Wat drukt deze code af?

boolean allPositive = true;
for (int k = 1; k <= 4; k++) {
    int value = k - 2;
    if (value <= 0) {
        allPositive = false;
    } else {
        allPositive = true;
    }
}
System.out.println(allPositive);
  1. false, omdat een eerdere waarde niet positief was.
  2. true, hoewel niet alle waarden positief waren.
  3. true, omdat elke gemaakte waarde positief was.
  4. false, hoewel elke gemaakte waarde positief was.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Combineer beslissingen met luspatronen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Welk sleutelwoord levert een resultaat uit een blokcase met meerdere instructies in een switch-expressie?
  1. yield
  2. break
  3. continue
  4. default
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat wordt afgedrukt?

int result = 0;
switch (2) {
    case 1:
        result += 2;
    case 2:
        result += 3;
    case 3:
        result += 5;
        break;
    default:
        result = -1;
}
System.out.println(result);
  1. 3
  2. 10
  3. 8
  4. -1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat is total na de lus?

int total = 0;
for (int k = 1; k <= 5; k++) {
    switch (k % 3) {
        case 0:
            break;
        default:
            total += k;
    }
    total++;
}
  1. 14
  2. 17
  3. 16
  4. 5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Wat is de uiteindelijke waarde van total?

int total = 0;
for (int n = 1; n <= 9; n++) {
    if (n % 2 == 0) {
        total += 2;
    } else if (n % 3 == 0) {
        total += 3;
    } else {
        total--;
    }
}
  1. 14
  2. 8
  3. 9
  4. 11
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een validatielus accepteert gehele getallen van 10 tot en met 14. De lus leest de invoer 8, 14 en dan 11 met do { ... } while (value < 10 || value > 14);. Hoeveel invoerwaarden leest de lus?
  1. 1
  2. 3
  3. 2
  4. 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat wordt afgedrukt?

int n = 58;
int result = 0;
do {
    int digit = n % 10;
    if (digit % 2 == 0) {
        result = result * 10 + digit;
    }
    n /= 10;
} while (n > 0);
System.out.println(result);
  1. 8
  2. 85
  3. 5
  4. 58
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een geneste lus drukt vier rijen van zes waarden af. De aanroep voor de regelafbreking staat na de binnenste lus maar binnen de buitenste lus. Hoeveel afdrukken van waarden en aanroepen voor regelafbrekingen worden uitgevoerd?
  1. 24 afdrukken van waarden en 24 aanroepen voor regelafbrekingen.
  2. 10 afdrukken van waarden en 4 aanroepen voor regelafbrekingen.
  3. 24 afdrukken van waarden en 6 aanroepen voor regelafbrekingen.
  4. 24 afdrukken van waarden en 4 aanroepen voor regelafbrekingen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Waarom kan Math.abs((0.1 + 0.2) - 0.3) < 1e-9 waar zijn terwijl (0.1 + 0.2) == 0.3 onwaar is?
  1. De tolerantie verandert de opgeslagen som in precies 0,3.
  2. Het berekende verschil is niet nul maar ligt onder de tolerantie.
  3. De gelijkheidsoperator vergelijkt objectidentiteiten van doubles.
  4. De aanroep voor de absolute waarde rondt elk verschil af naar nul.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een lus met een stopwaarde moet het gemiddelde van positieve gehele getallen tot 0 berekenen. De body leest een waarde, verhoogt count, controleert op 0 en stopt met break, en telt daarna de waarde op. Voor de invoer 6, 10, 0 drukt de lus (double) sum / count af. Wat is het resultaat en welke correctie is nodig?
  1. Ongeveer 5,3333; tel pas na de stoptest.
  2. 8,0; verplaats de bijwerking van de som vóór de stoptest.
  3. 16,0; initialiseer count op 1 vóór het lezen.
  4. Ongeveer 5,3333; zet in plaats daarvan het voltooide quotiënt expliciet om.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Wat drukt deze code af?

for (int n = 4; n > 0; n--);
{
    System.out.print("done");
}
  1. “done” vier keer
  2. Helemaal niets
  3. “done” oneindig vaak
  4. “done” één keer
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Zoek fouten en voorspel gecombineerd gedrag10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat is !(false || true)?
  1. true
  2. 0
  3. false
  4. 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat wordt afgedrukt?

int a = -2;
int b = 5;
if (a > 0)
    if (b > 0)
        System.out.print("both");
    else
        System.out.print("one");
System.out.print("end");
  1. “oneend”
  2. “end”
  3. “bothend”
  4. “bothoneend”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Welke waarde wordt toegewezen?

int level = 3;
int result = switch (level) {
    case 1, 2 -> 4;
    case 3 -> {
        int base = level * 2;
        yield base + 1;
    }
    default -> 0;
};
  1. 6
  2. 4
  3. 0
  4. 7
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Wat is de eindwaarde van count?

int count = 0;
outer:
for (int row = 1; row <= 3; row++) {
    for (int col = 1; col <= 3; col++) {
        if (row == col) {
            continue outer;
        }
        count++;
    }
}
  1. 3
  2. 6
  3. 0
  4. 9
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Voor n = 143 begint een lus die op een priemgetal controleert bij deler 2 en gaat door zolang d * d <= n, met een break bij een rest van nul. Bij welke deler stopt de lus voor het eerst?
  1. 7
  2. 11
  3. 12
  4. 13
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat is count aan het einde?

int count = 0;
int col = 1;
for (int row = 1; row <= 3; row++) {
    while (col <= row) {
        count++;
        col++;
    }
}
  1. 6
  2. 1
  3. 9
  4. 3
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een invoerlus stopt bij stopwaarde -9 en moet alleen het gemiddelde van positieve waarden berekenen. De lus begint sum en count op 0, controleert op de stopwaarde, telt daarna elke gegevenswaarde op bij sum maar verhoogt count alleen voor positieve waarden. Wat drukt (double) sum / count af voor de invoer -4, 6, -2, 10, -9 en welke correctie is nodig?
  1. 5.0; tel alleen positieve waarden op en mee.
  2. 8.0; tel alleen positieve waarden op en mee.
  3. 2.5; tel elke gegevenswaarde op en mee.
  4. 5.0; tel positieve waarden op maar tel elke gegevenswaarde mee.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Welk aantal cijfers levert dit op voor n = 0?

int n = 0;
int digits = 0;
do {
    digits++;
    n /= 10;
} while (n > 0);
  1. 0
  2. 10
  3. 1
  4. De lus stopt nooit.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een keten wijst score < 0 || score > 40 af, geeft daarna score >= 30 het label “high”, score >= 18 het label “middle” en de rest het label “low”. Welke labels krijgen de scores 40, 41 en 18, in die volgorde?
  1. “invalid”, “invalid”, “low”
  2. “high”, “invalid”, “middle”
  3. “high”, “high”, “middle”
  4. “high”, “invalid”, “low”
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een zoekactie drukt het eerste gehele getal van 25 tot en met 75 af dat deelbaar is door 4 of 7, maar niet door beide. Wat wordt afgedrukt?
  1. 28
  2. 35
  3. 32
  4. 36
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

63 Kernbegrippen, elk met een definitie

A

Accumulator
Een accumulator bewaart een lopend resultaat over lusdoorgangen heen en telt elke geaccepteerde waarde op bij het vorige resultaat of vermenigvuldigt die ermee.
Een accumulator die vóór de lus is geïnitialiseerd, houdt de totale afstand bij die over meerdere dagen is afgelegd.

B

Bereik
Het bereik van een lokale variabele is het deel van het programma waar die variabele kan worden genoemd; het bereik van een declaratie in een blok eindigt bij de afsluitende accolade.
Het bereik van een resultaat dat vóór een if is gedeclareerd, laat de volgende afdrukinstructie de toegewezen waarde lezen.
Bijwerking
Een bijwerking verandert de toestand die de lus aanstuurt na een normaal voltooide body; een for-kop plaatst die bewerking na de voorwaarde.
De bijwerking i += 4 verandert de teller van 2 naar 6 nadat de eerste for-lusbody is voltooid.
Binnenste lus
Een binnenste lus wordt omsloten door een andere lus en voert een herhaalde taak uit, zoals elke kolom van de huidige rij bezoeken.
De binnenste lus begint bij elke rij opnieuw bij kolom 1 als de teller correct wordt teruggezet.
Blok
Een blok groepeert instructies tussen accolades, zodat een tak of lus de groep als body kan behandelen, met een eigen bereik voor lokale variabelen.
Een blok rond twee afdrukinstructies maakt beide afhankelijk van dezelfde if-test.
Booleaanse waarde
Een booleaanse waarde is true of false; vergelijkingen leveren die waarde op en Java-voorwaarden vereisen een expressie van dit type.
De booleaanse waarde die in isFull is opgeslagen, wordt waar wanneer een container zijn capaciteit bereikt.
break-instructie
Een break-instructie verlaat direct het doel; zonder label is dat de dichtstbijzijnde omringende lus of switch waarin de instructie voorkomt.
Een break-instructie stopt de zoekactie zodra de eerste kandidaat is gevonden die aan de vereiste tests voldoet.
break-instructie met label
Een break-instructie met label noemt een omringende instructie met label als doel om te verlaten, zodat een geneste zoekactie een buitenste lus kan verlaten.
Een break-instructie met label beëindigt beide zoeklussen direct wanneer het vereiste paar is gevonden.
Buitenste lus
Een buitenste lus omsluit een andere lus en bepaalt hoe vaak de binnenste herhaling begint, doorgaans door per doorgang één rij verder te gaan.
De buitenste lus wordt vier keer uitgevoerd als een tabel vier rijen nodig heeft met na elke rij een regelafbreking.

C

case-label
Een case-label noemt een vaste waarde die een switch-case accepteert; meerdere door komma’s gescheiden labels kunnen één actie na een pijl delen.
Een case-label voor 6 kan in een switch met pijlen een weekendactie delen met het label voor 7.
Cijfers uit een getal halen
Cijfers uit een getal halen betekent met % 10 het laatste decimale cijfer van een niet-negatief geheel getal ophalen, zodat je het kunt gebruiken voordat deling het verwijdert.
Bij cijfers uit een getal halen worden de cijfers van rechts naar links doorlopen als een lus herhaaldelijk door 10 deelt.
Conditionele operator
De conditionele operator ?: kiest op basis van een booleaanse voorwaarde één van twee expressiewaarden en maakt zo een korte keuze tussen twee waarden mogelijk.
De conditionele operator zet label op “even” of “odd” op basis van een resttest.
continue-instructie
Een continue-instructie slaat de rest van de huidige lusbody over en gaat verder naar de volgende doorgang, inclusief de bijwerking van een gewone for-lus.
Een continue-instructie slaat de afdruk voor een ongewenste waarde over, maar laat de for-teller wel verdergaan.
continue-instructie met label
Een continue-instructie met label richt zich op een omringende lus met label, breekt het huidige werk af en gaat verder naar de volgende doorgang van die lus.
Een continue-instructie met label gaat naar de bijwerking van de buitenste for-lus in plaats van de resterende kolommen te controleren.

D

do-while-lus
Een do-while-lus voert de body uit voordat de voorwaarde wordt getest, zodat minstens één doorgang plaatsvindt voordat de herhaling kan stoppen.
Een do-while-lus vraagt om een beoordeling voordat wordt gecontroleerd of een nieuwe poging nodig is.
Doorvallen
Doorvallen is het doorgaan van de uitvoering vanuit een case met een dubbele punt naar instructies van latere cases, totdat de switch wordt verlaten of eindigt.
Een ontbrekende break veroorzaakt doorvallen, zodat bij een overeenkomst met de eerste case zowel het statusbericht daarvan als het bericht van de volgende case wordt afgedrukt.
Drempelwaarde
Een drempelwaarde is een grens die uitkomsten scheidt; de vergelijkingsoperator bepaalt of de grens zelf bij een geval hoort.
Een drempelwaarde geschreven als score >= 30 neemt 30 mee, terwijl score > 30 die exacte score uitsluit.

E

Eén-ernaastfout
Een één-ernaastfout laat een lus één keer te vaak of te weinig uitvoeren, meestal doordat de beginwaarde of de test van het eindpunt verkeerd is.
Een één-ernaastfout laat de laatste waarde weg als een lus < 12 gebruikt maar 12 moet meenemen.
else-if-keten
Een else-if-keten test meerdere voorwaarden op volgorde en voert alleen de eerste ware tak uit, of de laatste else als geen test slaagt.
Een else-if-keten wijst één beoordeling toe, ook als de score aan meerdere lagere drempelwaarden voldoet.
Exclusieve OF
Exclusieve OF is waar als precies één van twee booleaanse operanden waar is; Java drukt deze bewerking uit met de operator ^.
Exclusieve OF wijst een waarde af die door beide geteste getallen deelbaar is als precies één deelbaarheidsregel moet gelden.

F

for-lus
Een for-lus groepeert initialisatie, een herhaalde voorwaardetest en een bijwerking in één kop, waardoor getelde herhaling gemakkelijk te volgen is.
Een for-lus doorloopt de gehele getallen van 1 tot en met 12 en telt elke waarde bij een lopende som op.

G

Geheeltallige deling
Geheeltallige deling deelt gehele operanden en laat een eventueel breukdeel vervallen, zodat omzetting van het voltooide resultaat dat deel niet kan herstellen.
Geheeltallige deling geeft 4 voor 17 / 4; daarom zet een berekening van een gemiddelde eerst een operand om.
Gelijkheidsoperator
De gelijkheidsoperator == vergelijkt primitieve waarden, maar test bij objectreferenties zoals strings of de objecten identiek zijn.
De gelijkheidsoperator accepteert 3 == 3.0 omdat numerieke conversie hun waarden gelijk maakt.
Geneste lus
Een geneste lus is een lus binnen een andere lus, zodat de volledige herhaling ervan bij elke doorgang van de omringende body wordt bereikt.
Een geneste lus drukt alle kolommen van één rij af voordat de buitenste lus naar de volgende rij gaat.
Grenswaardetest
Een grenswaardetest controleert een waarde op of naast een grens en helpt zo gaten, overlap en een onterecht meegenomen of uitgesloten eindpunt te ontdekken.
Een grenswaardetest met 29, 30 en 31 controleert de overgang naar een categorie die bij 30 begint.

H

Hekpalenprobleem
Een hekpalenprobleem ontstaat wanneer aantallen elementen en tussenruimten verschillen, zoals bij vijf afgedrukte waarden die vier scheidingstekens nodig hebben.
Een hekpalenprobleem wordt voorkomen door vóór elk getal behalve het eerste een komma af te drukken.

I

Initialisatie
Initialisatie geeft een variabele een beginwaarde; de initialisatie van een for-lus wordt één keer uitgevoerd vóór de eerste voorwaardetest.
Initialisatie zet een afteller op 8 voordat de kop begint met testen en verlagen.
Invoervalidatie
Invoervalidatie controleert of een ingevoerde waarde aan de toegestane voorwaarden van het programma voldoet voordat die waarde wordt ingedeeld of verwerkt.
Invoervalidatie wijst een score boven 100 af voordat een beoordelingsketen die als “A” kan indelen.
Iteratie
Een iteratie is één uitvoering van een lusbody; de lusvoorwaarde bepaalt of een volgende doorgang kan beginnen of de herhaling eindigt.
Eén iteratie verdubbelt de opgeslagen hoeveelheid en verhoogt het aantal verstreken dagen met één.

K

Kortsluitevaluatie
Kortsluitevaluatie slaat de rechteroperand van && of || over als de linkeroperand het volledige resultaat al bepaalt.
Kortsluitevaluatie maakt count != 0 && sum / count > 5 veilig als beide variabelen int-waarden zijn.

L

Logische EN
Logische EN verbindt twee booleaanse expressies en is alleen waar als beide waar zijn; Java schrijft de vorm met kortsluitevaluatie als &&.
Een logische EN verbindt de onder- en bovengrens als beide moeten gelden voor een geaccepteerde temperatuur.
Logische OF
Logische OF verbindt twee booleaanse expressies en is waar als minstens één ervan waar is, ook als beide dat zijn; de vorm met kortsluitevaluatie is ||.
Een logische OF accepteert een commando als het overeenkomt met een van twee toegestane tekstlabels.
Lopend totaal
Een lopend totaal is de som van alle waarden die tot dan toe zijn verwerkt, wordt bij elke doorgang bijgewerkt en is beschikbaar voor een tussenstand of eindresultaat.
Een lopend totaal dat na elke optelling wordt afgedrukt, toont de voortgang voordat de laatste invoer is ingevoerd.
Losse else
Een losse else is een else waarvan de visuele groepering onduidelijk kan zijn; Java koppelt die aan de dichtstbijzijnde voorafgaande if zonder bijbehorende else.
Accolades lossen de losse else op wanneer een buitenste kaartcontrole een binnenste leeftijdscontrole bevat.
Lus met achteraf geteste voorwaarde
Een lus met achteraf geteste voorwaarde controleert na de uitvoering van de body of een volgende doorgang nodig is; de do-while-vorm van Java plaatst de voorwaarde na de afsluitende accolade.
Een lus met achteraf geteste voorwaarde kan een menu één keer tonen, ook als het eerste commando de lus direct beëindigt.
Lusvariabele
Een lusvariabele bevat veranderende toestand die de herhaling aanstuurt of beschrijft, zoals de huidige telling of kandidaatwaarde.
De lusvariabele neemt steeds met drie toe, zodat een grenscontrole kan stoppen, ook als een exact doel wordt overgeslagen.

M

Maximum
Een maximum is de grootste waarde in de verwerkte gegevens; een lus bewaart die door de opgeslagen beste waarde alleen te vervangen wanneer dat passend is.
Bij het bepalen van het maximum van meerdere negatieve temperaturen moet de beginwaarde uit de gegevens komen of voldoende laag zijn.
Minimum
Een minimum is de kleinste waarde in de verwerkte gegevens, bijgehouden door de opgeslagen beste waarde te vervangen wanneer een lagere meting verschijnt.
Het minimum blijft onveranderd op een warmere dag omdat de nieuwe meting niet kleiner is.

N

Negatie
Negatie keert met ! een booleaanse waarde om: waar wordt onwaar en onwaar wordt waar, zonder de onderliggende gegevens te veranderen.
De negatie in !command.equals("stop") is waar zolang de ingevoerde tekst verschilt van “stop”.

O

Oneindige lus
Een oneindige lus blijft herhalen zonder te worden verlaten, vaak doordat een vereiste bijwerking ontbreekt of een stopwaarde nooit wordt bereikt.
Een teller die op 1 blijft staan terwijl i <= 5 wordt getest, veroorzaakt een oneindige lus, tenzij een ander pad de lus verlaat.
Operatorprioriteit
Operatorprioriteit bepaalt hoe expressies zonder haakjes worden gegroepeerd; logische EN groepeert sterker dan logische OF.
Door operatorprioriteit betekent a || b && c hetzelfde als a || (b && c), ook al staat OF eerst.
Overloop
Overloop ontstaat wanneer een geheel resultaat buiten het bereik van zijn type valt en naar een andere waarde omslaat zonder een rekenfout te melden.
Overloop in een int-accumulator maakt een grote som onjuist, ook al past elke afzonderlijke invoerwaarde in een int.

P

Priemgetal
Een priemgetal is een geheel getal van minstens 2 zonder andere positieve delers dan 1 en zichzelf; als je een andere deler vindt, is het geen priemgetal.
De priemgetaltest wijst 91 af zodra die deler 7 bereikt, omdat de rest nul is.

R

Randgeval
Een randgeval is invoer of een begintoestand dicht bij een grens, zoals lege gegevens, één doorgang of een eindpunt, die een verborgen fout kan blootleggen.
Een randgeval waarbij de stopwaarde eerst wordt ingevoerd, controleert of een lus voor een gemiddelde geen gegevens aankan.
Rest
Een rest is de waarde die % na een geheeltallige deling overlaat; een rest van nul geeft aan dat een waarde deelbaar is door de deler.
De rest in -13 % 2 is -1, dus een test op een rest die niet nul is, herkent dit oneven gehele getal.

S

Selectiewaarde
Een selectiewaarde is de waarde die een switch evalueert en met zijn case-labels vergelijkt om te kiezen welke code of expressie wordt uitgevoerd.
De selectiewaarde command stuurt de tekst “wait” naar een case met precies dat stringlabel.
Stopwaarde
Een stopwaarde is een aangewezen invoerwaarde die het einde van een reeks aangeeft en vóór de gewone gegevensverwerking wordt gecontroleerd.
Een stopwaarde van -1 beëindigt het lezen zonder een extra element in de telling of som te worden.
switch-expressie
Een switch-expressie kiest en levert een waarde uit overeenkomende cases, zodat het resultaat kan worden toegewezen of in een andere expressie kan worden gebruikt.
Een switch-expressie wijst het aantal dagen toe door de case voor de huidige maand te kiezen.

T

Tak
Een tak is één pad door een beslissing; een if-else-instructie kiest op basis van een booleaanse voorwaarde één van de twee takken.
De tak voor onwaar drukt “Try again” af als de ingevoerde beoordeling niet aan de vereiste voorwaarde voldoet.
Tegenvoorbeeld
Een tegenvoorbeeld is één waarde die een bewering over alle waarden onwaar maakt; een vlag voor de vraag of alles voldoet, blijft na zo’n waarde onwaar.
Een meting van nul is een tegenvoorbeeld voor de bewering dat elke vastgelegde waarde positief is.
Teller
Een teller houdt bij hoeveel gebeurtenissen of waarden die voldoen zijn voorgekomen, begint meestal bij nul en neemt één keer per overeenkomst toe.
Een teller neemt alleen toe voor geaccepteerde metingen, zodat de noemer van hun gemiddelde correct blijft.
Toewijzingsoperator
De toewijzingsoperator = slaat een waarde op in een variabele; de resulterende expressie heeft die toegewezen waarde, geen vergelijkingsresultaat.
De toewijzingsoperator in if (done = true) verandert de vlag voordat de tak wordt uitgevoerd.
Tolerantie
Een tolerantie is een toegestane grootte van het verschil bij het vergelijken van berekende getallen die kleine afrondingsfouten kunnen bevatten.
Een tolerantie van 1e-9 accepteert in deze berekening het kleine verschil tussen 0.1 + 0.2 en 0.3.
Traceertabel
Een traceertabel legt geselecteerde programmawaarden vast op vaste momenten tijdens de uitvoering en maakt zo veranderende toestand en luspaden zichtbaar.
Een traceertabel toont het totaal na elke doorgang en de voorwaarde die de lus uiteindelijk stopt.

V

Vergelijkingsoperator
Een vergelijkingsoperator test hoe twee waarden zich tot elkaar verhouden en levert een booleaanse waarde op, bijvoorbeeld of het ene getal groter is dan het andere.
De vergelijkingsoperator <= neemt een score die gelijk is aan de bovengrens mee in een toegestaan bereik.
Vlag
Een vlag is een booleaanse variabele die vastlegt of aan een voorwaarde is voldaan, zoals een gevonden overeenkomst of een aangetroffen tegenvoorbeeld.
Een vlag voor een negatieve meting blijft na een overeenkomst waar, ook als de laatste meting positief is.
Volledigheid
Volledigheid betekent dat een switch die een waarde oplevert rekening houdt met elke mogelijke selectiewaarde, zodat geen invoer zonder resultaat blijft.
Een default-case zorgt voor volledigheid bij een switch op een int met slechts enkele expliciete labels.
Voortijdig verlaten
Voortijdig verlaten beëindigt een lus voordat de voorwaarde die normaal zou stoppen, vaak omdat een zoekresultaat of stopcommando is gevonden.
Voortijdig verlaten voorkomt dat een stopwaarde bij een lopend totaal wordt opgeteld of als gegevenswaarde wordt meegeteld.
Voortzettingsvoorwaarde
Een voortzettingsvoorwaarde beschrijft wanneer een volgende lusdoorgang moet plaatsvinden; een ware uitkomst herhaalt en een onware uitkomst beëindigt de herhaling.
De voortzettingsvoorwaarde voor de invoer van een beoordeling is waar buiten het interval van 1 tot en met 5.

W

Wetten van De Morgan
De wetten van De Morgan ontkennen een gecombineerde booleaanse test door beide operanden te ontkennen en de verbindende operator tussen EN en OF te verwisselen.
De wetten van De Morgan veranderen een test of een waarde niet binnen een gesloten interval ligt in een OF van twee grenzen voor waarden erbuiten.
while-lus
Een while-lus test vóór elke uitvoering van de body een booleaanse voorwaarde en kan nul doorgangen uitvoeren als de eerste test onwaar is.
Een while-lus blijft een hoeveelheid verdubbelen totdat die het doel bereikt of overschrijdt.

Y

yield-instructie
De yield-instructie levert een waarde uit een blokcase van een switch-expressie, na eventuele voorafgaande berekeningen in dat blok.
Een yield-instructie levert 29 nadat een case voor februari bepaalt dat het jaar een schrikkeljaar is.

Z

Zoekactie
Een zoekactie onderzoekt kandidaten totdat die een vereiste overeenkomst vindt of alle beschikbare kandidaten zonder resultaat heeft onderzocht.
Een zoekactie kan stoppen bij het eerste getal waarvan het kwadraat de gekozen grens overschrijdt.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag