Eerste Java-programma’s

Schrijf je eerste complete Java-programma’s: bouw een klasse met een main-methode, compileer en voer die uit, en herstel de fouten die de compiler en het programma tijdens de uitvoering melden. Sla waarden op in variabelen van primitieve typen en in Strings, reken met rekenkundige expressies waaronder geheeltallige deling en de rest, en zet waarden om naar andere typen met casts en parsen. Lees tekst en getallen van het toetsenbord met Scanner, maak resultaten op met printf en combineer alles in kleine programma’s die je test met resultaten die je met de hand hebt berekend.

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

Wat je leert

  1. Bouw een compleet Java-programma rond een main-methode, maak er met de compiler en het Java-startprogramma een uitvoerbaar programma van, herstel de fouten die het tegenhouden en geef tekst precies zoals bedoeld weer.
    • Bouw een programma rond de main-methode
      Herken de onderdelen van een minimaal Java-programma, plaats instructies op de juiste plek binnen de main-methode en volg de regels voor namen, accolades, puntkomma’s en commentaar.
    • Compileer, voer uit en herstel fouten
      Zet broncode met de JDK om in een uitvoerbaar programma en onderscheid compilatiefouten, uitvoeringsfouten en logische fouten, zodat je die allemaal kunt vinden en herstellen.
    • Geef tekst weer met print en println
      Geef tekst en waarden regel voor regel op het scherm weer, bepaal waar nieuwe regels beginnen en gebruik escapesequenties voor aanhalingstekens, tabs en backslashes.
  2. Declareer variabelen en werk die bij, kies voor elke waarde een geschikt primitief type en sla tekst op en combineer die in String-waarden.
    • Declareer variabelen, wijs waarden toe en werk die bij
      Maak variabelen met een type en een naam, geef ze waarden, volg de naamgevingsregels en voorspel de waarde van elke variabele tijdens de uitvoering van een programma.
    • Kies een primitief type en schrijf literals
      Kies het juiste primitieve type voor gehele getallen, kommagetallen, tekens en waarheidswaarden, schrijf literals van elk type en herken wanneer een waarde niet binnen het type past.
    • Sla tekst op en voeg die samen met concatenatie
      Sla tekst op in String-variabelen en bouw uitvoer op door strings, getallen en variabelen samen te voegen met de operator +, waarbij je precies voorspelt wat wordt weergegeven.
  3. Schrijf rekenkundige expressies die Java in de bedoelde volgorde evalueert, gebruik geheeltallige deling en de rest correct en reken met kommagetallen en de Math-klasse.
    • Schrijf expressies met operatoren en houd rekening met hun prioriteit
      Combineer waarden met rekenkundige operatoren, voorspel in welke volgorde Java die evalueert en werk variabelen bij met samengestelde toewijzing en increment.
    • Gebruik geheeltallige deling en de rest
      Voorspel de resultaten van / en % bij gehele getallen, gebruik ze om hoeveelheden in eenheden op te splitsen en herken deling door nul.
    • Reken met kommagetallen en de Math-klasse
      Reken met double-waarden, gebruik de kant-en-klare methoden van de Math-klasse voor wortels, machten en afronden en presenteer resultaten met een passend aantal decimalen.
  4. Voorspel welke conversies Java automatisch uitvoert, schrijf casts waar een conversie informatie kan verliezen en zet tekst om naar getallen en getallen naar tekst.
    • Gebruik verbredende en expliciete typeconversies
      Onderscheid automatische verbredende typeconversies van versmallende conversies waarvoor een cast nodig is, plaats casts zo dat berekeningen het bedoelde resultaat geven en voorspel wat een cast met een waarde doet.
    • Zet tekst om naar getallen en omgekeerd
      Zet strings met getallen om naar int- en double-waarden, zet getallen om naar strings en herken de fout die Java geeft bij tekst die geen geldig getal is.
  5. Lees tekst en getallen die de gebruiker typt, presenteer resultaten in een duidelijke opmaak en combineer invoer, berekening en uitvoer in kleine, geteste programma’s.
    • Lees invoer met Scanner
      Maak een Scanner voor toetsenbordinvoer, lees regels, woorden en getallen met de juiste methode en vermijd de veelvoorkomende valkuilen met regeleinden, verkeerde invoer en decimaaltekens.
    • Maak uitvoer op met printf
      Geef getallen weer met een vast aantal decimalen, lijn uitvoer uit in kolommen met printf en String.format en weet hoe de instellingen van de computer het decimaalteken veranderen.
    • Combineer invoer, berekening en uitvoer
      Plan, schrijf en test complete programma’s die waarden lezen, er met de juiste typen mee rekenen en duidelijke resultaten weergeven.

Eerste Java-programma’s: uitleg

5 hoofdstukken

1

Schrijf, compileer en voer een Java-programma uit

Een Java-programma begint als tekst, maar de computer heeft een precieze structuur nodig om die tekst als instructies te kunnen uitvoeren. Bouw een kleine klasse rond een main-methode en volg daarna de broncode tijdens het compileren en uitvoeren. Weergegeven berichten maken elke stap zichtbaar. Als iets mislukt, vertelt de fase waarin dat gebeurt je of je de broncode moet inspecteren, een exceptie tijdens de uitvoering moet lezen of het resultaat moet vergelijken met wat je verwachtte.

1.1 Bouw een programma rond de main-methode

Een eerste Java-programma geeft de computer een korte lijst met instructies. De omringende klasse en main-methode vertellen Java waar die instructies horen en waar de uitvoering begint.

Plaats instructies binnen main
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

De buitenste accolades omsluiten de klassebody. De binnenste accolades omsluiten de methodebody. Wanneer dit programma start, voert Java de eerste instructie binnen main uit. Meer instructies die daaronder staan, worden van boven naar beneden uitgevoerd. Wanneer main klaar is, eindigt dit kleine programma.

Neem public static void main(String[] args) zorgvuldig over. Hier zorgt public ervoor dat het startprogramma de methode kan aanroepen, maakt static uitvoering mogelijk zonder eerst een object te maken en geeft void aan dat de methode geen resultaat teruggeeft. String[] args ontvangt woorden die op de opdrachtregel na de programmanaam zijn getypt. Je kunt een bericht weergeven zonder die woorden te gebruiken.

Laat leestekens en namen overeenkomen

Een instructie zoals System.out.println("Hi"); eindigt met een puntkomma. Bij een openingsaccolade { hoort een sluitaccolade }. De hierboven getoonde klasse- en methodekop openen blokken; vervang die openingsaccolades niet door puntkomma’s. Als je de instructie vier spaties verder laat inspringen dan de methodekop, wordt de nesting zichtbaar.

Sla public class Hello op in Hello.java. De naam van de publieke klasse en het deel vóór .java moeten exact overeenkomen, inclusief hoofdletters. Als de declaratie public class Other luidt, moet het bestand Other.java heten. Een compilermelding dat de klasse in een ander bestand moet worden gedeclareerd, wijst op dit verschil.

Java is hoofdlettergevoelig. De naam System moet met een hoofdletter S beginnen; system.out.println("Hi"); compileert niet. Een methode met de naam Main is een andere methode dan main. Een klasse met alleen Main kan compileren, maar het startprogramma kan de bedoelde startmethode niet vinden wanneer je het programma uitvoert.

Maak de code leesbaar

Gebruik één instructie per regel en laat elk niveau tussen accolades vier spaties inspringen. De meeste spaties en regeleinden tussen code-elementen hebben geen invloed op het compileren. Spaties binnen tekst tussen aanhalingstekens hebben wel invloed op de uitvoer. Klassenamen staan volgens de conventie in PascalCase, zoals TravelTime.

Commentaar legt code uit aan mensen. Java negeert alles na // op die regel. Blokcommentaar begint met /* en eindigt met */ en kan meerdere regels beslaan. Nuttig commentaar legt een reden uit, zoals // Convert hours to seconds naast een omzetting waarvan het doel misschien onduidelijk is.

Herken de kortere vorm

Java 25 en later ondersteunen ook een compact bronbestand:

void main() {
    IO.println("Hello, world!");
}

Deze vorm laat de expliciete klassedeclaratie weg. IO.println geeft een regel weer en IO.readln("Your name: ") toont een invoervraag en geeft de getypte regel terug. De klassieke vorm met een klasse werkt ook met oudere Java-versies; beide vormen hebben een main-methode waar de uitvoering begint.

Belangrijkste punten

  • Plaats uitvoerbare instructies binnen de main-methode en zorg dat elke openingsaccolade een sluitaccolade heeft.
  • Sluit een instructie zoals een aanroep voor uitvoer af met een puntkomma.
  • De publieke klasse Hello hoort in Hello.java; hoofdletters zijn belangrijk.
  • Commentaar legt code uit aan lezers en wordt tijdens het compileren genegeerd.
  • Java 25 voegt een compacte bronvorm toe; de klassieke vorm met een klasse werkt ook in oudere versies.

1.2 Compileer, voer uit en herstel fouten

Broncode schrijven en een programma uitvoeren zijn afzonderlijke stappen. Java controleert en vertaalt je code eerst en voert die daarna uit. Als je weet welke stap is mislukt, kun je bepalen waar je moet zoeken.

Compileer de broncode en start daarna de klasse

Broncode is de tekst in een .java-bestand. De compiler, javac, vertaalt geldige broncode naar bytecode in een .class-bestand. De Java Virtual Machine (JVM) voert die bytecode uit. Met een geschikte JVM kan dezelfde bytecode op verschillende besturingssystemen worden uitgevoerd.

Open een terminal in de map met Hello.java en voer in:

javac Hello.java
java Hello

De eerste opdracht maakt Hello.class als het compileren slaagt. De tweede start het programma. Het argument is de klassenaam, zonder .class: met java Hello.class vraag je het startprogramma naar de verkeerde klassenaam te zoeken en dat mislukt.

De JDK, oftewel Java Development Kit, levert beide opdrachten. Een IDE, zoals IntelliJ IDEA, Eclipse, NetBeans of Visual Studio Code met Java-ondersteuning, compileert en start het programma wanneer je op de uitvoerknop drukt. De omgeving kan fouten markeren terwijl je typt, maar het zijn nog steeds fouten in dezelfde Java-taal.

Sinds Java 11 biedt de bronbestandsmodus een kortere route voor één klein programma:

java Hello.java

Hiermee wordt de broncode in het geheugen gecompileerd en uitgevoerd zonder een .class-bestand achter te laten. Houd de twee vormen uit elkaar: java Hello start een gecompileerde klasse, terwijl java Hello.java broncode start.

Lees compilatiefouten

Een compilatiefout verhindert dat de code met succes wordt gecompileerd. Een ontbrekende puntkomma kan bijvoorbeeld dit opleveren:

Hello.java:3: error: ';' expected
        System.out.println("Hello")
                                   ^

De melding geeft het bestand, de regel en de plek aan waar de compiler het probleem opmerkte. De werkelijke fout kan eerder staan: een niet-afgesloten aanhalingsteken op één regel kan latere regels verstoren. Lees de gemarkeerde regel en de regel ervoor. Herstel de eerste gemelde fout en compileer opnieuw voordat je meerdere andere regels wijzigt. Eén reparatie kan veel latere meldingen laten verdwijnen.

Onderscheid uitvoeringsfouten van verkeerde antwoorden
Soort probleemWat gebeurt erHoe onderzoek je het
CompilatiefoutDe broncode kan niet met succes worden gecompileerd.Lees de eerste compilermelding en inspecteer de code eromheen.
UitvoeringsfoutDe uitvoering stopt met een exceptie.Lees de exceptie en zoek de opgegeven regel.
Logische foutDe uitvoering eindigt, maar het resultaat is verkeerd.Vergelijk de uitvoer met een met de hand berekend resultaat.

Als een variabele divisor van een geheel type nul bevat, mislukt 5 / divisor tijdens de uitvoering met ArithmeticException: / by zero. De rekenkundige instructie kan geldige broncode zijn, ook al veroorzaken de waarden tijdens de uitvoering een fout.

Een programma dat een gemiddelde van 8 weergeeft terwijl de juiste waarde ongeveer 8,33 is, heeft een logische fout. Geen compilermelding kan je vertellen dat dit voor jouw taak het verkeerde resultaat is. Test met bekende invoer, inspecteer tussenwaarden en zoek de eerste onjuiste berekening.

Werk in een korte cyclus: bewerken, opslaan, compileren, uitvoeren, testen. Opslaan is belangrijk: compileren leest het opgeslagen bestand, dus niet-opgeslagen wijzigingen kunnen het gecompileerde programma niet veranderen.

Belangrijkste punten

  • javac Hello.java compileert broncode; java Hello voert de resulterende klasse uit.
  • De JDK levert ontwikkelopdrachten; de JVM voert bytecode uit.
  • Herstel de eerste compilatiefout en compileer opnieuw voordat je latere meldingen onderzoekt.
  • Een exceptie tijdens de uitvoering stopt het programma; voor een logische fout moet je het resultaat vergelijken met het verwachte resultaat.

1.3 Geef tekst weer met print en println

Weergegeven uitvoer is de eerste manier om te zien wat een programma doet. Met Java bepaal je welke tekens worden weergegeven en waar de volgende regel begint.

Volg de uitvoerpositie

System.out.print(...) schrijft de waarde en laat de uitvoerpositie op dezelfde regel staan. System.out.println(...) schrijft de waarde en begint daarna een nieuwe regel. Een aanroep van System.out.println() met lege haakjes voegt alleen een regeleinde toe.

System.out.print("Hello");
System.out.print(", ");
System.out.println("world");
System.out.println("Bye");

De eerste twee aanroepen laten de positie achter de spatie na de komma staan. De derde voegt world op die positie toe en gaat dan naar een nieuwe regel. De exacte uitvoer is:

Hello, world
Bye

Java voegt geen spaties tussen aanroepen in. Als je de spatie in ", " verwijdert, wordt de eerste regel “Hello,world”. Een lege println() tussen de laatste twee instructies zou een lege regel tussen de berichten maken.

Bepaal of je tekst of een waarde wilt

Een stringliteral is tekst tussen dubbele aanhalingstekens. Als je "7 * 6" weergeeft, verschijnt de tekst “7 * 6”. Als je 7 * 6 weergeeft, wordt de vermenigvuldiging geëvalueerd en verschijnt “42”. De aanhalingstekens zijn leestekens in de code; ze worden niet als onderdeel van de literal weergegeven.

Als name bijvoorbeeld “Ada” bevat, geeft System.out.println(name); “Ada” weer, terwijl System.out.println("name"); “name” weergeeft. Gebruik de variabele zonder aanhalingstekens als je de opgeslagen waarde wilt.

Enkele aanhalingstekens hebben een andere rol. 'A' is één char-waarde. 'Hello' kan geen bericht met meerdere tekens bevatten en veroorzaakt een compilatiefout. Gebruik "Hello" voor die tekst.

Zet speciale tekens in een string

Een escapesequentie begint met een backslash en stelt een teken binnen de literal voor.

Code binnen een literalWeergegeven teken
\nNieuwe regel
\tTab
\"Dubbel aanhalingsteken
\\Eén backslash

Bijvoorbeeld:

System.out.println("She said \"hi\"");
System.out.println("C:\\Users");

Deze instructies geven She said "hi" en C:\Users weer, op afzonderlijke regels. De extra backslashes vertellen Java hoe het volgende teken moet worden geïnterpreteerd; ze worden niet allemaal naar de uitvoer gekopieerd.

Eén aanroep kan ook meerdere regels weergeven:

System.out.println("Name:\tAda\nAge:\t36");

De tab scheidt het label van de waarde en \n zet de leeftijd op de volgende regel. De aanroep van println voegt ook zelf een afsluitend regeleinde toe. Een tab gaat naar een tabstop, dus de zichtbare breedte hangt af van de uitvoeromgeving.

Een gewone stringliteral tussen aanhalingstekens moet op dezelfde bronregel beginnen en eindigen. Als je midden in de literal op Enter drukt, blijft die onafgesloten. Om een lang bericht over bronregels te verdelen, schrijf je twee volledige literals die je met + verbindt, of gebruik je afzonderlijke aanroepen voor uitvoer.

Belangrijkste punten

  • print blijft op de huidige regel; println voegt na de waarde een regeleinde toe.
  • Aanhalingstekens maken tekst letterlijk: "name" geeft die letters weer, terwijl name de waarde van de variabele weergeeft.
  • Gebruik escapesequenties voor nieuwe regels, tabs, aanhalingstekens en backslashes.
  • Spaties binnen een string worden exact weergegeven; aanroepen voor uitvoer voegen geen scheidende spaties toe.
  • Gebruik dubbele aanhalingstekens voor een string en enkele aanhalingstekens voor één char-waarde.
  • Een gewone stringliteral begint en eindigt op één bronregel.
2

Sla gegevens op in variabelen van het juiste type

Met variabelen kan een programma waarden tussen instructies bewaren, maar elke opgeslagen waarde heeft een type. Volg toewijzingen stap voor stap om te zien wat verandert en wat vast blijft. Kies typen voor gehele getallen, kommagetallen, tekens of waarheidswaarden die bij de gegevens passen en combineer daarna tekst en waarden tot leesbare berichten. Kleine verschillen in de schrijfwijze van literals of de volgorde van plustekens kunnen zowel het type als het resultaat van een expressie veranderen.

2.1 Declareer variabelen, wijs waarden toe en werk die bij

Een variabele geeft een waarde een naam, zodat latere instructies die kunnen gebruiken. Het type vertelt Java welke soort waarde de variabele kan bevatten; een toewijzing verandert de opgeslagen waarde.

Declareer en initialiseer
int age;
age = 36;

De declaratie introduceert age als een int. De toewijzing slaat 36 op. De gecombineerde vorm int age = 36; heet initialisatie. Een lokale variabele moet een waarde krijgen voordat je die leest. Als je int age; declareert en direct daarna age weergeeft, krijg je een foutmelding dat de variabele mogelijk niet is geïnitialiseerd.

Declareer een naam één keer binnen dezelfde methodebody. Om de waarde later te veranderen, schrijf je age = 37;, zonder int te herhalen. Een tweede int age = 37; in die body probeert dezelfde variabele opnieuw te declareren.

Lees een toewijzing van rechts naar links

De rechterkant van = wordt eerst berekend. Java slaat dat resultaat daarna op in de variabele links:

int count = 5;
count = count + 1;

De tweede instructie leest de huidige waarde 5, telt er 1 bij op en slaat 6 op. Het teken = betekent toewijzing, geen wiskundige bewering dat een getal gelijk is aan zichzelf plus één. De linkerkant moet een plek aangeven waar de waarde kan worden opgeslagen; 36 = age; is ongeldig.

Een toewijzing kopieert de waarde op dat moment:

int a = 5;
int b = a;
a = 10;

Nu bevat a de waarde 10 en b de waarde 5. Er blijft geen verbinding bestaan die b opnieuw berekent als a verandert.

Volg een verwisseling

Stel dat first de waarde 4 bevat en second de waarde 9. De reeks first = second; second = first; verliest de 4 bij de eerste stap en laat beide waarden op 9 staan. Bewaar eerst de oorspronkelijke waarde:

int temp = first;
first = second;
second = temp;
Na instructiefirstsecondtemp
int temp = first;494
first = second;994
second = temp;944

Een traceertabel legt elke variabele na elke instructie vast. Bij int x = 3; x = x * 2; x = x + 1; zijn de waarden eerst 3, dan 6 en dan 7. Werk telkens één rij bij met de laatst opgeslagen waarden.

Kies bruikbare namen en vaste typen

Namen mogen letters, cijfers, onderstrepingstekens en dollartekens bevatten. Ze mogen niet met een cijfer beginnen of een gereserveerd woord zoals class zijn. Hoofdletters zijn belangrijk: total en Total verschillen. Gebruik beschrijvende namen in camelCase, zoals distanceKm of secondsLeft.

Aan een final-variabele kun je maar één keer een waarde toewijzen. final int SECONDS_PER_HOUR = 3600; geeft een vaste omrekeningsfactor een duidelijke naam. Een nieuwe toewijzing compileert niet. Namen van constanten bestaan volgens de conventie uit hoofdletters, met onderstrepingstekens tussen de woorden.

Sinds Java 10 kan var het type van een lokale variabele afleiden uit de initialisatiewaarde. var count = 10; leidt int af; var price = 2.5; leidt double af. Het afgeleide type blijft vast. var count; mislukt omdat er geen initialisatiewaarde is waaruit een type kan worden afgeleid.

Belangrijkste punten

  • Een declaratie geeft een variabele een naam en een type; initialisatie geeft de variabele ook een beginwaarde.
  • Een toewijzing evalueert de rechterkant en slaat daarna het resultaat links op.
  • Een waarde kopiëren verbindt variabelen niet; gebruik een tijdelijke variabele wanneer je waarden verwisselt.
  • Lees een lokale variabele pas nadat die een waarde heeft gekregen.
  • final voorkomt hertoewijzing en var leidt een vast type af uit een initialisatiewaarde.

2.2 Kies een primitief type en schrijf literals

Het type van een waarde bepaalt het bereik, de schrijfwijze van de literal en de berekeningen die Java ermee kan uitvoeren. Gebruik int voor gewone aantallen en double voor gewone metingen, en herken ook de andere primitieve typen.

Vergelijk de acht primitieve typen
TypeOpslag en waarden
byteGeheel getal van 8 bits: −128 tot 127
shortGeheel getal van 16 bits: −32.768 tot 32.767
intGeheel getal van 32 bits: −2.147.483.648 tot 2.147.483.647
longGeheel getal van 64 bits: −9.223.372.036.854.775.808 tot 9.223.372.036.854.775.807
floatZwevendekommagetal van 32 bits; ongeveer 7 significante cijfers
doubleZwevendekommagetal van 64 bits; ongeveer 15–17 significante cijfers
charEén UTF-16-code-eenheid van 16 bits: 0 tot 65.535
booleantrue of false

Eindige float-waarden lopen bij benadering van −3,4 × 10³⁸ tot +3,4 × 10³⁸; eindige double-waarden lopen bij benadering van −1,8 × 10³⁰⁸ tot +1,8 × 10³⁰⁸. Deze grote bereiken betekenen niet dat elk kommagetal erin exact kan worden weergegeven.

Een char stelt vaak één teken voor, zoals 'A'. Sommige Unicode-tekens hebben twee UTF-16-code-eenheden nodig, dus één char kan niet elk mogelijk teken voorstellen. 'A' heeft de numerieke code 65, 'a' heeft 97 en '7' heeft 55. Het teken '7' is iets anders dan het gehele getal 7. Een boolean is geen getal: boolean active = 1; mislukt.

Schrijf literals passend bij hun type

Een literal schrijft een waarde rechtstreeks in de broncode. 42 is een int-literal, 42L een long, 3.5 een double en 3.5f een float. Tekenliterals gebruiken enkele aanhalingstekens; String-literals gebruiken dubbele aanhalingstekens. Namen van primitieve typen schrijf je met kleine letters, terwijl String met een hoofdletter begint.

Schrijf long large = 3000000000L;. Zonder de L is die literal voor een geheel getal te groot. Schrijf float rate = 3.5f;: 3.5 zonder toevoeging heeft het type double, dat Java niet stilzwijgend versmalt naar float. Een constante met een geheel getal dat past, kan een kleiner geheel type initialiseren: byte b = 100; compileert, maar byte b = 200; niet.

Onderstrepingstekens tussen cijfers maken een literal leesbaar: 1_000_000 heeft dezelfde waarde als 1000000. Wetenschappelijke notatie gebruikt e, zoals in 1.5e3, wat 1500,0 betekent. Decimalen in broncode gebruiken altijd een punt.

Let op het bereik van de bewerking

Bij een berekening met gehele getallen kan overloop optreden zonder foutmelding. Als je 1 optelt bij de grootste int, loopt de waarde door naar de kleinste int. Het product 50_000 * 50_000 gebruikt int-rekenkunde en levert -1794967296 op. In 50_000L * 50_000 is één operand een long, waardoor het product de juiste waarde 2500000000 heeft.

Als je alleen de ontvangende variabele verandert in een long, ben je te laat om een int-product te herstellen waarbij al overloop is opgetreden. Kies vóór de vermenigvuldiging een operand met een voldoende groot bereik.

Zwevendekommawaarden hebben een andere beperking. Veel decimale breuken worden opgeslagen als binaire benaderingen: 0.1 + 0.2 geeft 0.30000000000000004 weer. Maak zulke resultaten op voor de weergave. Bij exacte geldberekeningen kun je hele centen opslaan in een long; de klasse BigDecimal is een andere mogelijkheid om exact met decimalen te rekenen.

Belangrijkste punten

  • Java heeft acht primitieve typen; String is een klasse.
  • Gebruik de achtervoegsels van een literal om long (L) of float (f) te kiezen.
  • Bij berekeningen met gehele getallen kan ongemerkt overloop optreden; verbreed een operand vóór de berekening.
  • Zwevendekommatypen slaan veel decimale breuken bij benadering op.
  • Een char slaat één UTF-16-code-eenheid op, terwijl een boolean een waarheidswaarde opslaat.
  • Een decimaal getal in broncode gebruikt een punt, ook op een computer die decimale komma’s gebruikt.

2.3 Sla tekst op en voeg die samen met concatenatie

Een String bevat tekst, met bijvoorbeeld spaties, cijfers en leestekens, of helemaal geen tekens. De operator + kan die tekst combineren met andere waarden om een bericht op te bouwen.

Voeg waarden samen tot tekst
String firstName = "Ada";
String lastName = "Lovelace";
System.out.println(firstName + " " + lastName);

De uitvoer is “Ada Lovelace”. De middelste literal levert de spatie. Zonder die literal zou firstName + lastName de uitvoer “AdaLovelace” opleveren. Concatenatie voegt zelf geen scheidingstekens toe.

Concatenatie betekent waarden samenvoegen tot een nieuwe string. Als een van beide operanden van + een String is, zet Java de andere waarde om naar tekst en voegt die samen. Zo wordt "Age: " + 36 de tekst “Age: 36” en wordt "Price: " + 2.5 de tekst “Price: 2.5”. De cijfers in het resultaat maken nu deel uit van een tekstwaarde.

String begint met een hoofdletter S. Anders dan de acht primitieve typen is het een klasse. Als je string name = "Ada"; met een kleine s schrijft, compileert de code niet. De lege string "" is geldige tekst zonder tekens; het is geen ontbrekende waarde.

Volg plustekens van links naar rechts

Bekijk:

System.out.println("Sum: " + 2 + 3);

De eerste + voegt de String en 2 samen tot “Sum: 2”. De tweede voegt die String en 3 samen tot “Sum: 23”. Zodra het tussenresultaat tekst is, blijft de volgende + tekst samenvoegen.

Vergelijk drie vormen:

ExpressieResultaatReden
"Sum: " + 2 + 3"Sum: 23"Bij de eerste optelling is tekst aanwezig.
2 + 3 + " apples""5 apples"De eerste bewerking telt twee getallen op.
"Sum: " + (2 + 3)"Sum: 5"Door de haakjes vindt de optelling eerst plaats.

Gebruik haakjes wanneer een bericht het resultaat van een optelling of aftrekking moet bevatten. "Diff: " + (5 - 2) geeft bijvoorbeeld “Diff: 3”. Zonder haakjes probeert "Diff: " + 5 - 2 2 van een String af te trekken en compileert de code niet.

Vermenigvuldigen en delen hebben een hogere prioriteit dan +. De expressie "Area: " + 4 * 5 berekent eerst het product en geeft “Area: 20”.

Bouw een bericht in stappen op
String message = "Hi";
message += "!";

De bijgewerkte variabele bevat “Hi!”. Bij een String voegt += tekst achteraan toe door het samengevoegde resultaat weer aan de variabele toe te wijzen. Je kunt met meerdere instructies een kort bericht samenstellen en het aan het einde één keer weergeven.

Let op bij tekens. Twee char-operanden leiden niet tot Stringconcatenatie. 'A' + 'B' telt hun numerieke codes, 65 en 66, op en levert de int 131 op. Als je met de lege String begint, verandert de keten: "" + 'A' + 'B' maakt eerst “A” en daarna “AB”. Aanhalingstekens bepalen de typen van de operanden en dus ook de betekenis van +.

Belangrijkste punten

  • Concatenatie voegt tekst samen; er worden geen extra spaties ingevoegd.
  • Een keten van +-bewerkingen verloopt van links naar rechts nadat bewerkingen met een hogere prioriteit zijn uitgevoerd.
  • Zet een optelling of aftrekking met getallen tussen haakjes voordat je het resultaat samenvoegt met een label.
  • Twee char-waarden worden als getallen opgeteld, tenzij een String al deel uitmaakt van de bewerking.
3

Reken met rekenkundige expressies

Berekeningen hangen af van zowel de volgorde van bewerkingen als de typen van hun operanden. Volg expressies voordat je ze uitvoert, vooral wanneer een deling in een grotere berekening voorkomt. Met geheeltallige deling en resten splits je hoeveelheden op in groepen of tijdseenheden; rekenen met kommagetallen behoudt breukdelen. Kant-en-klare Math-methoden verwerken wortels, machten en afrondingen, met retourtypen die van belang zijn wanneer je de resultaten opslaat.

3.1 Schrijf expressies met operatoren en houd rekening met hun prioriteit

Een expressie combineert waarden om een resultaat op te leveren. Java evalueert die volgens de operatorprioriteit; daarna kan een instructie dat resultaat opslaan of weergeven.

Schrijf de bewerkingen expliciet

De rekenkundige operatoren zijn +, -, *, / en %: optellen, aftrekken, vermenigvuldigen, delen en rest. Met int width = 4; en int height = 5; wordt width * height geëvalueerd tot 20.

Elke vermenigvuldiging heeft * nodig. De algebraïsche vorm 2(3 + 4) is ongeldige Java-code; schrijf 2 * (3 + 4). Java heeft geen rekenkundige machtsoperator. 2 ^ 3 betekent een bitsgewijze bewerking en levert 1 op, geen 8. Om een waarde te kwadrateren schrijf je x * x; gebruik Math.pow om een andere macht te berekenen.

Pas de prioriteit toe voordat je van links naar rechts leest
VolgordeOperatoren of groepering
EerstHaakjes
DaarnaUnair minteken en casts
Daarna*, /, %
Als laatste+, -

Op hetzelfde niveau worden deze rekenkundige operatoren van links naar rechts gegroepeerd. 2 + 3 * 4 is 14; (2 + 3) * 4 is 20. In 10 - 4 - 3 geeft de eerste aftrekking 6 en de tweede 3. In 24 / 4 * 2 geeft de deling 6 en de vermenigvuldiging 12. Om 4 * 2 als noemer te behandelen, zijn haakjes nodig.

Bereken een gemiddelde correct

Stel int a = 7, b = 8, c = 10;. De expressie a + b + c / 3 deelt alleen c. Door geheeltallige deling is 10 / 3 gelijk aan 3 en de optellingen geven daarna 18.

(a + b + c) / 3 groepeert het hele totaal, 25, maar beide operanden van / zijn gehele getallen. Het resultaat is 8. Met (a + b + c) / 3.0 blijft het breukdeel behouden en krijg je 8.333333333333334.

De typen van de operanden bepalen de berekening. Twee int-operanden leveren een int-resultaat op. Door een double-operand wordt de andere numerieke operand omgezet naar double, zoals in 5 * 2.0, met als resultaat 10.0. De ontvangende variabele verandert niet hoe de eerdere berekening is uitgevoerd.

Werk een opgeslagen waarde bij
int total = 10;
total += 5;
total *= 2;
total--;

De opgeslagen waarden worden achtereenvolgens 10, 15, 30 en 29. Voor deze int-operanden voert total += 5; dezelfde bijwerking uit als total = total + 5;. De operatoren -=, /= en %= combineren op dezelfde manier een bewerking met een toewijzing. count++; verhoogt een variabele met 1 en count--; verlaagt die met 1. Als je ze als afzonderlijke instructies gebruikt, is hun effect gemakkelijk te volgen.

Een expressie zoals a + b verandert geen van beide operanden. Om het resultaat te gebruiken, wijs je het toe of geef je het door aan een aanroep voor uitvoer: int sum = a + b; of System.out.println(a + b);. De losse regel a + b; compileert niet, omdat Java die rekenkundige expressie niet als zelfstandige instructie toestaat. Toewijzingen, increments, decrements en methodeaanroepen kunnen zelfstandig voorkomen en kunnen effecten hebben.

Belangrijkste punten

  • Gebruik expliciete operatoren: * vermenigvuldigt en ^ berekent geen macht.
  • Pas eerst de prioriteit toe; werk op hetzelfde rekenkundige niveau van links naar rechts.
  • Zet een volledig totaal tussen haakjes voordat je het deelt om een gemiddelde te vinden.
  • De typen van de operanden bepalen de resultaten van de berekening voordat de toewijzing plaatsvindt.
  • Samengestelde toewijzing slaat een bijgewerkte waarde op; zelfstandige ++ en -- veranderen die met 1.

3.2 Gebruik geheeltallige deling en de rest

Geheeltallige deling geeft antwoord op de vraag hoeveel complete groepen passen. De rest vertelt je wat overblijft. Samen splitsen deze bewerkingen een hoeveelheid op in bruikbare delen.

Voorspel quotiënt en rest

Als beide operanden gehele getallen zijn, laat / het breukdeel weg en gaat de uitkomst richting nul. 7 / 2 is 3, 2 / 3 is 0 en -7 / 2 is −3. Dit is afkappen, geen afronding op het dichtstbijzijnde gehele getal.

De restoperator % geeft terug wat na de deling overblijft. 17 / 5 geeft 3 en 17 % 5 geeft 2. Drie groepen van 5 zijn samen 15, zodat 2 overblijft. Voor gehele operanden en een deler ongelijk aan nul reconstrueert (a / b) * b + a % b de waarde a met Java-rekenkunde voor gehele getallen.

Het teken van een rest ongelijk aan nul volgt de linkeroperand: -7 % 3 is −1, terwijl 7 % -3 gelijk is aan 1. Voor niet-negatieve gehele getallen is n % 2 gelijk aan 0 bij even waarden en 1 bij oneven waarden.

Splits seconden op in grotere eenheden

Begin met 3725 seconden:

int totalSeconds = 3725;
int hours = totalSeconds / 3600;
int secondsAfterHours = totalSeconds % 3600;
int minutes = secondsAfterHours / 60;
int seconds = secondsAfterHours % 60;

De eerste deling vindt 1 volledig uur. De rest is 125 seconden. Als je die rest deelt door 60, vind je 2 minuten, met 5 seconden over. Het resultaat is 1 h 2 min 5 s. Als je het totaal opnieuw opbouwt, krijg je 3600 seconden plus 120 seconden plus 5 seconden, oftewel 3725.

Gebruik de rest na het verwijderen van uren om de minuten binnen het huidige uur te vinden. Als je het oorspronkelijke totaal door 60 deelt, krijg je alle 62 volledige minuten, inclusief de minuten die al als een uur zijn meegeteld.

Met dezelfde operatoren haal je decimale cijfers uit een niet-negatief geheel getal. 4827 % 10 geeft het laatste cijfer, 7; 4827 / 10 geeft de resterende voorste cijfers, 482.

Onderscheid volle groepen van voldoende verpakkingen

Voor 50 eieren en dozen waarin 12 eieren passen, geeft 50 / 12 4 volle dozen en geeft 50 % 12 2 eieren over. Om alle eieren te verpakken is een vijfde doos nodig. Voor niet-negatieve aantallen en positieve doosgroottes rondt de expressie met gehele getallen (count + size - 1) / size het aantal verpakkingen naar boven af, mits bij de optelling geen overloop optreedt. Voor dit voorbeeld geeft (50 + 12 - 1) / 12 de waarde 5.

Kies een deling met breukdeel voordat die plaatsvindt
ExpressieOpgeslagen of berekend resultaat
double result = 7 / 2;3.0
double result = 7 / 2.0;3.5
double result = (double) 7 / 2;3.5

Een double als doel kan een weggelaten breukdeel niet terughalen. Maak een operand vóór de deling een double wanneer je het breukdeel nodig hebt.

Deling of restbepaling met het gehele getal nul werpt tijdens de uitvoering een ArithmeticException op. Zwevendekommagetallen gedragen zich bij deling anders: 5.0 / 0 geeft Infinity, -5.0 / 0 geeft -Infinity en 0.0 / 0 geeft NaN, wat “geen getal” betekent. Een resultaat kan dus onbruikbaar zijn, ook wanneer de uitvoering niet stopt.

Belangrijkste punten

  • Geheeltallige / kapt af richting nul; % geeft de rest terug.
  • Een rest ongelijk aan nul bij gehele getallen heeft het teken van het deeltal.
  • Gebruik opeenvolgende quotiënten en resten om seconden op te splitsen in uren, minuten en seconden.
  • Volle dozen en de dozen die voor alle voorwerpen nodig zijn, beantwoorden verschillende vragen.
  • Maak vóór de deling een operand double om een breukdeel te behouden.
  • Geheeltallige deling door nul werpt een exceptie op; een zwevendekomma-deling kan oneindigheid of NaN opleveren.

3.3 Reken met kommagetallen en de Math-klasse

Rekenen met kommagetallen is nuttig voor metingen en gemiddelden. De klasse Math voegt kant-en-klare berekeningen toe, terwijl je met afronden kunt kiezen hoe je een resultaat opslaat of presenteert.

Behoud breukdelen en herken benaderingen

150 / 2.5 geeft 60.0, een snelheid in km/h als de afstand 150 km is en de tijd 2,5 uur. Omdat een operand een double is, behoudt de deling zo nodig een breukdeel in het resultaat. Gewone doubles met een gehele waarde worden met een decimaal deel weergegeven, zoals 60.0.

Een double slaat van veel decimale waarden een binaire benadering op. Daardoor geeft 1.1 * 3 de uitvoer 3.3000000000000003 en 10.0 / 3 de uitvoer 3.3333333333333335. Behoud de waarde voor latere berekeningen en rond die af bij de presentatie.

Grote of kleine waarden kunnen in wetenschappelijke notatie worden weergegeven. 1.23456789E7 stelt 12.345.678,9 voor en 1.0E-4 stelt 0,0001 voor. Voor positieve eindige waarden wordt gewone notatie gebruikt vanaf 0,001 tot maar niet met 10.000.000. Wetenschappelijke notatie verandert de weergegeven vorm, niet de onderliggende waarde.

Roep nuttige Math-methoden aan

Math staat in java.lang, dus er is geen import nodig.

AanroepResultaat en doel
Math.sqrt(16)4.0, een vierkantswortel
Math.pow(2, 10)1024.0, een macht
Math.abs(-7)7, een absolute waarde
Math.max(3, 9)9, de grootste waarde
Math.min(3, 9)3, de kleinste waarde

Math.sqrt en Math.pow geven double terug. De constante Math.PI is ongeveer 3,141592653589793. Voor een cirkel met straal 2,5 cm geeft Math.PI * 2.5 * 2.5 de waarde 19.634954084936208 cm², ongeveer 19,63 cm². Voor een rechthoekige driehoek met rechthoekszijden van 3 cm en 4 cm telt Math.sqrt(3 * 3 + 4 * 4) eerst de gekwadrateerde rechthoekszijden op tot 25 en geeft daarna 5.0 cm.

Kies een afrondingsrichting
AanroepResultaat
Math.round(2.4)2
Math.round(2.5)3
Math.round(-2.5)-2
Math.floor(2.7)2.0
Math.ceil(2.1)3.0
Math.floor(-2.7)-3.0

round kiest het dichtstbijzijnde gehele getal, waarbij waarden precies halverwege richting positieve oneindigheid gaan. floor gaat naar beneden, richting negatieve oneindigheid; ceil gaat naar boven, richting positieve oneindigheid. Bij negatieve getallen betekent “naar beneden” een negatievere waarde, dus naar beneden afronden van −2,7 geeft −3,0.

Voor een double-argument geeft Math.round een long terug. Sla dat resultaat op in een long of zet het expliciet om wanneer een int passend is: int rounded = (int) Math.round(2.7); slaat 3 op. floor en ceil geven double-waarden terug.

Om een opgeslagen waarde op twee decimalen af te ronden, gebruik je Math.round(12.3456 * 100) / 100.0, wat 12.35 geeft. Door eerst te vergroten, komt de positie van de honderdsten op de grens van de gehele getallen te liggen. Delen door 100.0 verkleint de waarde weer met een zwevendekomma-deling; delen door het gehele getal 100 zou het breukdeel weglaten en 12 geven. Als alleen de weergegeven tekst moet worden afgerond, kan printf de oorspronkelijke waarde direct opmaken.

Belangrijkste punten

  • Een double behoudt breukdelen in resultaten, maar benadert veel decimale breuken.
  • Math.sqrt, Math.pow en Math.PI ondersteunen meetkundige berekeningen zonder import.
  • round kiest het dichtstbijzijnde gehele getal; floor en ceil kiezen een richting.
  • Math.round(double) geeft long terug, terwijl floor en ceil double teruggeven.
  • Gebruik een deler met een decimaal bij het terugschalen van een afgeronde waarde om het breukdeel te behouden.
4

Zet waarden om naar andere typen

Een waarde kan worden omgezet tussen numerieke typen of tussen getallen en tekst. Elke route heeft eigen regels: sommige numerieke conversies gaan automatisch, sommige vereisen een cast en numerieke tekst moet vóór een berekening worden geparseerd. Volg de conversie op het precieze moment waarop die plaatsvindt. Omzetten na een bewerking kan eerder verloren informatie niet terughalen, terwijl een geslaagde conversie een grote waarde of een waarde met een breukdeel toch kan veranderen.

4.1 Gebruik verbredende en expliciete typeconversies

Java zet een numerieke waarde soms automatisch om. Andere conversies hebben een expliciete cast nodig. Een cast verandert het type van een waarde op een bepaalde plek in een expressie, dus de plaats beïnvloedt het antwoord.

Verbreed automatisch

De belangrijkste route voor numerieke verbreding is byte → short → int → long → float → double. Een char wordt ook verbreed naar int en verder. Zo slaat double d = 5; de waarde 5.0 op en past elke int-waarde exact in een long.

Verbreding naar een zwevendekommatype kan precisie verliezen. Bij int naar float, long naar float en long naar double kan een groot geheel getal worden afgerond. De conversie van int naar double is exact. Zo wordt (float) 16777217 de waarde 1.6777216E7, die 16.777.216 voorstelt.

Gebruik een cast voor een versmallende conversie

Bij een cast schrijf je het doeltype tussen haakjes vóór de waarde:

int n = (int) 3.99;

Het opgeslagen resultaat is 3. Zonder (int) wijst Java de toewijzing van de double-literal aan een int af. De conversie van een eindige double binnen het bereik naar een geheel getal kapt af richting nul: (int) -3.99 geeft eveneens −3. Afkappen verschilt van afronden; (int) Math.round(3.99) geeft 4.

Versmallende conversies hebben meestal een cast nodig. Een nuttige uitzondering staat toe dat een constante expressie met een geheel getal dat past, een byte, short of char initialiseert. Zo is byte b = 100; geldig zonder (byte). Voor een niet-constante int-variabele geldt deze uitzondering voor constante toewijzingen niet alleen omdat de huidige waarde past.

Zet de cast vóór de bewerking waarvoor die nodig is

Neem int sum = 25; en int count = 3;.

ExpressieWat gebeurt erResultaat
(double) sum / countZet sum om en deel daarna met een double.8.333333333333334
(double) (sum / count)Deel gehele getallen en zet daarna het gehele resultaat om.8.0

Een cast heeft een hogere prioriteit dan vermenigvuldigen en delen. Haakjes bepalen of de cast geldt voor één operand of een voltooide berekening. Een cast na geheeltallige deling kan weggelaten informatie niet herstellen.

Voorspel veranderingen in tekens en kleine gehele getallen

(int) 'A' geeft de tekencode 65. Als je 1 bij 'A' optelt, krijg je de int 66. Om het volledige resultaat weer om te zetten naar een teken, schrijf je (char) ('A' + 1), wat 'B' geeft. Zonder de buitenste haakjes rond de som zou de cast alleen voor 'A' gelden.

Een versmallende conversie tussen gehele typen behoudt alleen de laagste bits. (byte) 200 wordt −56; (int) 3_000_000_000L wordt −1294967296. Een cast staat de conversie toe, maar controleert niet of de oorspronkelijke waarde past.

Samengestelde toewijzing heeft een ingebouwde conversie naar het type links. Met int x = 10; berekent x += 2.7; de waarde 12,7 en versmalt die naar 12. De gewone toewijzing x = x + 2.7; mislukt omdat de rechterkant double is.

Belangrijkste punten

  • Verbreding gaat automatisch, maar sommige conversies naar een zwevendekommatype kunnen grote gehele getallen afronden.
  • Een versmallende conversie heeft meestal een cast nodig; voor passende gehele constanten geldt een uitzondering bij toewijzing aan een klein type.
  • Een cast van een kommagetal binnen het bereik naar een geheel getal kapt af richting nul.
  • Gebruik vóór de deling een cast op een operand als de bewerking een breukdeel moet behouden.
  • Een versmallende conversie tussen gehele typen kan een waarde veranderen door hoge bits weg te laten.
  • Samengestelde toewijzing bevat een conversie terug naar het type van de variabele.

4.2 Zet tekst om naar getallen en omgekeerd

Tekst kan cijfers bevatten zonder een getal te zijn. Om met getypte of opgeslagen tekst te rekenen, parseer je die naar een numeriek type. Om een bericht op te bouwen, zet je een numerieke waarde weer om naar tekst.

Parseer tekst voordat je rekent

De expressie "42" + 1 levert “421” op. Omdat de linkeroperand een String is, voert + concatenatie uit. Integer.parseInt("42") + 1 levert 43 op, omdat parsen vóór de optelling een int oplevert.

String first = "12";
String second = "30";
int total = Integer.parseInt(first) + Integer.parseInt(second);

Hier bevat total de waarde 42. Samenvoegen van de oorspronkelijke strings zou “1230” geven. Kies de conversie op basis van het beoogde gebruik van de waarde, niet op basis van de vraag of de tekens toevallig op een getal lijken.

Integer.parseInt(text) geeft een int terug; Long.parseLong(text) geeft een long terug. Integer.valueOf("42") geeft een Integer-object terug, dat Java automatisch omzet naar int wanneer een int nodig is. Voor een directe omzetting van tekst naar int maakt parseInt het bedoelde resultaat duidelijk.

Parseer kommagetallen en waarheidswaarden

Double.parseDouble("3.75") geeft de double 3,75 terug. De tekstnotatie gebruikt op elke computer een decimale punt, ongeacht de regio-instellingen. Double.parseDouble("3,5") mislukt. Ook Java-broncode gebruikt bij literals een punt, al kunnen methoden voor toetsenbordinvoer een taal- en regio-instelling volgen.

Boolean.parseBoolean(text) volgt een andere regel: de methode geeft true terug voor “true” in elke combinatie van hoofdletters en kleine letters, zoals “TRUE”. Alle andere tekst geeft false terug, waaronder “yes”. Een algemeen bevestigend woord wordt niet als waar geïnterpreteerd.

Herken ongeldige numerieke tekst

Ongeldige numerieke tekst veroorzaakt een NumberFormatException terwijl het programma draait. Integer.parseInt("4.5") mislukt omdat decimale tekst geen schrijfwijze van een geheel getal is. Integer.parseInt("") en Integer.parseInt(" 42") mislukken ook. De exceptiemelding geeft aan welke tekst niet kon worden omgezet.

Hoe witruimte wordt behandeld, hangt af van de parser. Double.parseDouble negeert spaties aan het begin en einde, terwijl Integer.parseInt dat niet doet. Kies bij het lezen van gebruikersgegevens testinvoer die deze verschillen zichtbaar maakt.

Een handig invoerpatroon is om één hele regel te lezen en te parsen:

int age = Integer.parseInt(scanner.nextLine());
double height = Double.parseDouble(scanner.nextLine());

Elke aanroep verwerkt de hele regel, inclusief het regeleinde. Daardoor blijven tekstuele en numerieke invoer consistent en voorkom je dat je het lezen van tokens en het lezen van hele regels door elkaar gebruikt.

Zet een getal om naar tekst

String.valueOf(42), Integer.toString(42) en "" + 42 leveren allemaal de String “42” op. Double.toString(2.50) levert “2.5” op. De oorspronkelijke decimale schrijfwijze blijft niet aan het opgeslagen getal verbonden, dus deze conversie voegt geen nul aan het einde toe om die schrijfwijze te behouden.

Gebruik String.format wanneer je opgeslagen tekst met een vast aantal decimalen nodig hebt. Gebruik printf wanneer je die opgemaakte tekst direct wilt weergeven. Een numerieke cast en eenvoudige concatenatie zorgen geen van beide voor een weergave met een vast aantal van twee decimalen.

Belangrijkste punten

  • Tekst die op een getal lijkt, blijft een String totdat die wordt geparseerd.
  • Integer.parseInt en Double.parseDouble leveren numerieke waarden op om mee te rekenen.
  • Double.parseDouble gebruikt een decimale punt, ongeacht de taal- en regio-instelling.
  • Ongeldige numerieke tekst veroorzaakt NumberFormatException; bij het parsen van gehele getallen worden spaties eromheen afgewezen.
  • Boolean.parseBoolean accepteert “true” ongeacht het gebruik van hoofdletters en geeft voor andere tekst false terug.
  • Een eenvoudige conversie van getal naar tekst behoudt extra nullen aan het einde niet.
5

Lees invoer en bouw complete programma’s

Invoer en uitvoer maken van een berekening een programma dat iemand kan gebruiken. Kies voor elke invoervraag een passende Scanner-leesmethode, bepaal hoe kommagetallen worden ingevoerd en kies duidelijke uitvoerlabels en getalnotaties. Bouw een compleet programma vanuit een invoer–berekening–uitvoerplan en test het daarna met resultaten die je met de hand hebt berekend. Een programma kan compileren en met succes eindigen terwijl het toch de verkeerde regel leest of de verkeerde waarde weergeeft.

5.1 Lees invoer met Scanner

Toetsenbordinvoer komt binnen als tekst. Een Scanner kan een hele regel of één woord lezen, of een woord lezen en omzetten naar een getal. Kies een consistent leesplan voordat je de gebruiker om waarden vraagt.

Maak één Scanner en lees een regel
import java.util.Scanner;

public class Greeting {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("What is your name? ");
        String name = scanner.nextLine();
        System.out.println("Hello, " + name + "!");
    }
}

De import komt vóór de klasse. De instructie die de Scanner maakt, komt binnen main en verbindt de Scanner met System.in. Eén Scanner is genoeg voor dit programma. nextLine() wacht op de getypte regel en geeft de tekst zonder het regeleinde terug. Als je “Ada” typt, geeft de laatste instructie “Hello, Ada!” weer. Door print voor de invoervraag te gebruiken, blijft de invoer naast de vraag staan.

Kies regels of tokens
MethodeWat de methode leest
nextLine()De rest van de huidige regel, zonder het regeleinde
next()Het volgende door witruimte gescheiden token als tekst
nextInt()Het volgende token als een int
nextLong()Het volgende token als een long
nextDouble()Het volgende token als een double
nextBoolean()Het volgende token als een waarheidswaarde

Bij “Ada Lovelace” geeft next() “Ada” terug. Een daaropvolgende nextLine() geeft “ Lovelace” terug, inclusief de spatie vooraan. Twee aanroepen van nextInt() kunnen “3 4” van één regel lezen. Een numeriek token dat niet bij de methode past, zoals “4.5” of “abc” voor nextInt(), veroorzaakt een InputMismatchException.

Houd rekening met het ongelezen regeleinde

Stel dat de gebruiker “30” typt, op Enter drukt, daarna “Ada Lovelace” typt en op Enter drukt. Deze code leest de naam niet zoals bedoeld:

int age = scanner.nextInt();
String name = scanner.nextLine();

nextInt() verwerkt 30 maar laat het regeleinde staan. nextLine() verwerkt direct de lege rest van diezelfde regel, dus name is "". Voeg scanner.nextLine(); toe tussen de twee instructies om die rest weg te lezen voordat je de naam op de volgende regel leest.

Een andere oplossing is om elk antwoord met nextLine() te lezen en numerieke regels te parsen: int age = Integer.parseInt(scanner.nextLine());. Zo voorkom je dat je wisselt tussen twee verschillende invoereenheden.

Maak de decimaalnotatie duidelijk

nextDouble() volgt de taal- en regio-instelling van de Scanner, aanvankelijk de standaardopmaakinstelling van de computer. Een instelling met een decimale komma accepteert in dit voorbeeld “3,5” als kommagetal en wijst “3.5” af. Om kommagetallen met een punt consequent te lezen, voeg je import java.util.Locale; toe en maak je:

Scanner scanner = new Scanner(System.in).useLocale(Locale.US);

Een hele regel lezen met Double.parseDouble(scanner.nextLine()) gebruikt ook een punt. Als je de taal- en regio-instelling van de Scanner verandert, veranderen Java-literals in broncode en de instelling voor latere aanroepen van printf niet.

Lees waarden in de volgorde waarin de invoervragen erom vragen. Als je om een naam en daarna om een leeftijd vraagt, moet de eerste leesactie de naam opslaan. Een leesactie op de verkeerde plek kan gegevens in de verkeerde variabele plaatsen of een conversiefout veroorzaken.

Belangrijkste punten

  • Importeer java.util.Scanner vóór de klasse en maak één Scanner binnen main.
  • nextLine() leest de rest van een regel; tokenmethoden lezen door witruimte gescheiden waarden.
  • Een numeriek token van de verkeerde soort veroorzaakt InputMismatchException.
  • Lees na een numeriek token de rest van de regel weg voordat je tekst op de volgende regel leest.
  • useLocale(Locale.US) legt vast dat Scanner-invoer een decimale punt gebruikt; regels parsen is een andere consistente aanpak.
  • Lees invoer in dezelfde volgorde als de invoervragen.

5.2 Maak uitvoer op met printf

Opgemaakte uitvoer bepaalt hoe waarden binnen een bericht verschijnen. Met printf kun je een vast aantal decimalen tonen, een regeleinde toevoegen en waarden in kolommen uitlijnen zonder hun opgeslagen waarden te veranderen.

Koppel tijdelijke aanduidingen aan waarden

Een opmaakstring bevat gewone tekst plus specificaties die met % beginnen. Elke specificatie die een waarde verwerkt, neemt de volgende waarde die na de opmaakstring wordt opgegeven:

System.out.printf("%s is %d years old%n", "Ada", 36);

Dit geeft “Ada is 36 years old” weer en begint een nieuwe regel. %s toont tekst of een andere waarde als tekst, %d toont een geheel getal zoals een int of long en %f toont een zwevendekommawaarde. %n voegt een regeleinde in zonder een waarde te verwerken. %% geeft één procentteken weer.

printf voegt niet automatisch een regeleinde toe. Neem %n op wanneer de volgende uitvoer op een nieuwe regel moet beginnen. Een gewone escapesequentie \n stelt ook een nieuweregelteken in Java-tekst voor; %n is het platformspecifieke regelscheidingsteken van de opmaakfunctie.

Stel decimalen voor de weergave in

%f zonder precisie geeft zes plaatsen na het decimaalteken weer: het opmaken van 2.5 geeft “2.500000”. De precisie in %.2f vraagt om twee decimalen:

System.out.printf("Total: %.2f%n", 12.3456);

Met Amerikaanse opmaak is de uitvoer “Total: 12.35”. De waarde wordt afgerond in de weergegeven tekst. Een variabele die 12,3456 bevat, bevat na de weergave nog steeds die waarde voor verdere berekeningen.

Bij System.out.printf("%d items at %.2f each, total %.2f%n", 3, 1.5, 3 * 1.5); vullen de waarden de drie tijdelijke aanduidingen in volgorde in. Met Amerikaanse instellingen is de uitvoer “3 items at 1.50 each, total 4.50”.

Lijn velden uit met breedte

Een breedte is een minimale veldgrootte. %5d lijnt een geheel getal rechts uit binnen minstens vijf tekens; %-6s lijnt tekst links uit binnen minstens zes tekens. %6.1f combineert breedte 6 met één decimaal.

System.out.printf("[%5d][%-6s][%6.1f]%n", 42, "Ada", 9.25);

Met Amerikaanse instellingen is de exacte uitvoer [ 42][Ada ][ 9.3]. De vierkante haken maken de opvulling zichtbaar. Een waarde die langer is dan de breedte wordt nog steeds volledig weergegeven; de breedte kapt geen tekens af.

Een specificatie die niet past, veroorzaakt een uitvoeringsfout. printf("%d%n", 2.5) compileert maar werpt IllegalFormatConversionException op, omdat %d een geheel getal verwacht. Te weinig opgegeven waarden, zoals in printf("%d %d%n", 2), veroorzaken MissingFormatArgumentException.

Kies uitvoer of opgeslagen tekst

String.format past dezelfde opmaakregels toe, maar geeft een String terug:

String line = String.format("%.1f km", 12.345);

Met Amerikaanse instellingen bevat line de tekst “12.3 km”; die instructie heeft niets weergegeven.

Beide opmaakmethoden gebruiken de standaardinstelling voor taal en regio, tenzij je er een meegeeft. Voeg import java.util.Locale; toe en gebruik dan System.out.printf(Locale.US, "%.2f%n", 12.3456); om “12.35” te krijgen in plaats van de “12,35” die een instelling met een decimale komma gebruikt. Ook String.format kan Locale.US als eerste argument krijgen. Een double weergeven met println gebruikt een punt, ongeacht de taal- en regio-instelling voor de opmaak.

Belangrijkste punten

  • Koppel elke specificatie die een waarde verwerkt aan de volgende waarde van een geschikt type.
  • Gebruik %n voor een regeleinde en %% voor een letterlijk procentteken.
  • %.2f rondt de weergegeven tekst af op twee decimalen zonder de opgeslagen waarde te veranderen.
  • Breedte vult een veld aan tot een minimale grootte; langere waarden worden niet afgekapt.
  • String.format geeft tekst terug, terwijl printf die weergeeft.
  • Geef een taal- en regio-instelling mee om het decimaalteken in opgemaakte uitvoer te bepalen.

5.3 Combineer invoer, berekening en uitvoer

Een compleet rekenprogramma verbindt drie stappen: lees de invoer, reken ermee en geef de resultaten weer. Als je de waarden en hun eenheden plant voordat je begint te typen, helpt dat bij het kiezen van typen en het testen van het resultaat.

Plan een reistijdprogramma

De invoer bestaat uit afstand in kilometers en gemiddelde snelheid in km/h. Als je de afstand deelt door de snelheid, krijg je de tijd in uren. Beide metingen hebben double nodig, zodat de deling een breukdeel kan behouden. De uitvoer bestaat uit hele uren en minuten, afgerond op de dichtstbijzijnde minuut.

import java.util.Scanner;

public class TravelTime {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Distance (km): ");
        double distance = Double.parseDouble(scanner.nextLine());
        System.out.print("Speed (km/h): ");
        double speed = Double.parseDouble(scanner.nextLine());
        int totalMinutes = (int) Math.round(distance / speed * 60);
        int hours = totalMinutes / 60;
        int minutes = totalMinutes % 60;
        System.out.println("Travel time: " + hours + " h " + minutes + " min");
    }
}

Bij 150 km met 80 km/h geeft de deling 1,875 uur. Vermenigvuldiging met 60 geeft 112,5 minuten. Math.round geeft de long 113 terug en de cast zet die om naar int. Geheeltallige deling en rest geven daarna 1 uur en 53 minuten. De uitvoer is “Travel time: 1 h 53 min”.

Als afstand en snelheid allebei int waren, zou 150 / 80 * 60 de waarde 60 opleveren. Het breukdeel verdwijnt bij de deling, vóór de vermenigvuldiging. Typekeuzes horen thuis in het plan, niet alleen in de laatste instructie voor uitvoer.

Kies weergave en berekening afzonderlijk

Voor een rekening van in totaal 87,60, verdeeld over 4 personen, sla je het totaal op in double en het aantal in int. double share = total / people; geeft 21,9. Met Amerikaanse opmaak geeft System.out.printf("Each person pays %.2f%n", share); de uitvoer “Each person pays 21.90”. De opmaak levert de tweede decimaal zonder de berekening te veranderen.

Voor de scores als gehele getallen 7, 8 en 10 geeft double average = (a + b + c) / 3.0; de waarde 8.333333333333334, die met %.2f als “8.33” wordt weergegeven. De haakjes groeperen het totaal en de deler met een decimaal behoudt het breukdeel.

Test met resultaten die je kent

Bereken verwachte resultaten voordat je het programma uitvoert. Voor reistijd zou 120 km met 60 km/h de uitvoer 2 h 0 min moeten geven. Een afstand van 0 km bij een positieve snelheid zou 0 h 0 min moeten geven. Probeer invoer dicht bij een afrondingsgrens en grotere geldige afstanden om meer dan alleen de eenvoudigste berekening te testen.

Neem nul, negatieve en grote invoer op wanneer je het gedrag van het programma controleert. Bepaal of elke invoer voor de taak zinvol is. Bij een aantal van nul personen levert total / people de waarde Infinity op wanneer total een double ongelijk aan nul is; geheeltallige deling door nul werpt ArithmeticException op. Een geslaagde uitvoering alleen bewijst niet dat het antwoord bruikbaar is.

Als de uitvoer afwijkt van je verwachting, geef dan tussenwaarden weer of volg die in een tabel. Zoek de eerste verkeerde waarde, herstel de verantwoordelijke instructie en voer de bekende tests opnieuw uit. Vergelijk naast getallen ook spaties en labels.

Gebruik namen zoals totalMinutes, benoemde constanten zoals MINUTES_PER_HOUR, eenheden in invoervragen en kort commentaar dat het doel van een berekening uitlegt.

Belangrijkste punten

  • Zet invoer, uitvoer, formules, eenheden en typen op een rij voordat je een rekenprogramma schrijft.
  • Behoud breukdelen van metingen tijdens berekeningen en rond daarna af wanneer de uitvoer om hele eenheden vraagt.
  • Test gewone invoer, grenswaarden en ongeschikte invoer tegen het verwachte gedrag.
  • Volg tussenwaarden om de eerste onjuiste stap te vinden.
  • Duidelijke namen, constanten en eenheden maken een programma gemakkelijker te controleren.

Eerste Java-programma’s: voorbeelden

5 Walkthroughs

1

Bouw en voer een klein programma met een bericht uit

13 stappen
Volg een programma vanaf de klassestructuur tot de exacte uitvoer en zoek daarna in welke fase een fout ontstaat.
  1. 1
    IntroductieVolg instructies vanaf main

    Een Java-programma heeft een startpunt en een reeks instructies nodig. In de klassieke vorm bevat een klasse main en bevat main de instructies die worden uitgevoerd.

    Je bouwt een kort bericht, start het programma en volgt de uitvoerpositie door meerdere aanroepen voor uitvoer. Dezelfde volgorde helpt bij het opsporen van fouten: controleer eerst of de broncode compileert, dan of het programma wordt uitgevoerd en daarna of de uitvoer overeenkomt met het bedoelde bericht.

  2. 2
    VoorbeeldPlaats het bericht binnen de methode

    Begin met deze volledige structuur:

    public class Notice {
        public static void main(String[] args) {
            System.out.println("Studio open");
        }
    }
    

    De buitenste accolades omsluiten de klasse; het binnenste paar omsluit de methode. Java begint met de instructie voor uitvoer binnen main. De puntkomma sluit de instructie af, terwijl de sluitaccolades de twee omringende body’s afsluiten.

  3. 3
    TipControleer namen voordat je meer code toevoegt

    Sla de publieke klasse Notice op in Notice.java. Neem de hoofdletter N exact over. Behoud ook System en de methode main met kleine letters: Java behandelt verschillende schrijfwijzen met hoofdletters als verschillende namen.

    Laat elke geneste body vier spaties inspringen, zodat een verkeerd geplaatste accolade gemakkelijk opvalt. Kort commentaar met // kan een reden voor een stap uitleggen zonder een uitvoerbare instructie te worden.

  4. 4
    UitdagingHerstel de startmethode

    Een bestand declareert correct public class Bulletin, maar de enige methode is public static void Main(String[] args). Het bestand compileert en het startprogramma kan de main-methode niet vinden. Welke wijziging is nodig?

    ---reveal---

    Verander Main in main. De naam met een hoofdletter declareert een andere methode en levert dus niet het bedoelde startpunt. Het bestand moet ook Bulletin.java blijven heten, zodat de naam overeenkomt met de publieke klasse.

  5. 5
    UitlegCompileer en start het berichtprogramma

    Voer vanuit de broncodemap in:

    javac Notice.java
    java Notice
    

    javac controleert de broncode en maakt de bytecode Notice.class. java start de JVM om die klasse uit te voeren. Een JDK levert beide opdrachten; een IDE voert deze fasen uit achter de uitvoerknop. Laat in de startopdracht voor een gecompileerde klasse de extensie .class weg. java Notice.java is een afzonderlijke vorm om een bronbestand te starten, beschikbaar sinds Java 11.

  6. 6
    UitdagingLees eerst de eerste fout

    Nadat een cursist het afsluitende aanhalingsteken van een bericht heeft verwijderd, ziet die meerdere compilermeldingen op die regel en latere regels. Moet elke latere instructie direct worden herschreven? Leg de volgende stap uit.

    ---reveal---

    Herstel de eerste fout door de stringliteral af te sluiten, sla op en compileer opnieuw. Door één niet-afgesloten aanhalingsteken kan latere code verkeerd gevormd lijken. Opnieuw compileren laat zien of die latere meldingen verdwijnen voordat verdere wijzigingen nodig zijn.

  7. 7
    VoorbeeldVolg de eerste twee aanroepen voor uitvoer

    Vervang het oorspronkelijke bericht door:

    System.out.print("Studio ");
    System.out.print(3);
    

    De eerste aanroep geeft het woord en de spatie erna weer. Omdat print geen regeleinde toevoegt, plaatst de tweede aanroep 3 direct na die spatie. De huidige uitvoer is “Studio 3” en de volgende aanroep zou nog steeds op deze regel verdergaan. Aanroepen voor uitvoer voegen zelf geen extra scheidingstekens toe.

  8. 8
    VoorbeeldSluit een regel af en begin een nieuwe

    Ga in hetzelfde programma verder met:

    System.out.println(" open");
    System.out.println("Welcome");
    

    De eerste aanroep voegt de spatie vooraan en het woord “open” toe aan de bestaande regel en sluit die regel daarna af. De tweede geeft “Welcome” weer en sluit de volgende regel af. De volledige tekst is:

    Studio 3 open
    Welcome
    

    Er staat geen lege regel tussen de berichten; een lege println() zou er een toevoegen.

  9. 9
    KernpuntAanhalingstekens en escapesequenties bepalen de tekst

    Aanhalingstekens bepalen of Java letterlijke tekst weergeeft of code evalueert. println("3 + 4") geeft “3 + 4” weer; println(3 + 4) geeft 7 weer.

    Om een aanhalingsteken binnen een literal op te nemen, schrijf je \". Voor een nieuwe regel binnen een literal schrijf je \n; een tab is \t en één backslash is \\. De escapesequenties worden tekens in de resulterende tekst. Een gewone literal zelf moet op één bronregel beginnen en eindigen.

  10. 10
    UitdagingVoorspel de regelgrenzen

    Wat geeft deze code weer?

    System.out.print("A");
    System.out.println("B");
    System.out.println();
    System.out.print("C");
    

    ---reveal---

    De eerste regel is “AB”, de tweede regel is leeg en de derde bevat “C”. De eerste aanroep blijft op de regel, de volgende sluit die af en de lege println() zorgt voor nog een regeleinde. Er staan geen spaties tussen A en B omdat geen enkele instructie er een weergeeft.

  11. 11
    VerbandBepaal in welke fase de fout ontstaat

    Stel dat een aangepast berichtprogramma compileert, start en daarna stopt bij een geheeltallige deling door nul. Dat is een uitvoeringsfout, gemeld met een exceptie. Als het programma eindigt maar een ruimte met het verkeerde nummer aanduidt, is dat een logische fout.

    Compileren controleert de regels van Java; de compiler weet niet welke ruimte je bedoelde. Bedenk vóór het testen wat het verwachte bericht is en vergelijk elk label, elke waarde, elke spatie en elk regeleinde.

  12. 12
    UitdagingOnderscheid twee reparaties

    Een programma compileert eerst niet omdat een instructie voor uitvoer geen puntkomma heeft. Na die reparatie wordt het uitgevoerd, maar geeft het twee berichten op één regel weer terwijl twee regels nodig zijn. Wat moet je in elke fase veranderen?

    ---reveal---

    Voeg de puntkomma toe om de compilatiefout te herstellen. Verander daarna de print van het eerste bericht in println, of geef daar een regeleinde weer, om de fout in de uitvoerlogica te herstellen. Controleer de tweede wijziging door de werkelijke regelindeling met de verwachte indeling te vergelijken.

  13. 13
    SamenvattingControleer structuur, uitvoering en uitvoer

    Gebruik de structuur van de klasse en main om de uitvoerbare instructies te vinden. Laat de naam van de publieke klasse overeenkomen met het bronbestand en compileer en start daarna met de juiste opdrachten.

    Volg aanroepen voor uitvoer door de huidige uitvoerpositie te volgen: print blijft staan, println gaat verder. Bepaal bij een verkeerd resultaat of compilatie is mislukt, de uitvoering is gestopt of de voltooide uitvoer afwijkt van je verwachting. Elk geval vraagt om een andere controle.

2

Volg opgeslagen waarden en bouw een bericht op

12 stappen
Volg kopieën en bijwerkingen, kies typen en zie hoe tekst de betekenis van plus verandert.

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

  1. 1
    IntroductieVolg waarden voordat je de uitvoer voorspelt
  2. 2
    VoorbeeldMaak twee onafhankelijke opgeslagen waarden
  3. 3
    VoorbeeldWerk alleen de genoemde doelvariabele bij
  4. 4
    UitdagingBewaar een waarde bij het verwisselen
  5. 5
    TipGebruik final en var bewust
  6. 6
    UitlegKies een type dat bij de gegevens past
  7. 7
    VoorbeeldLaat de schrijfwijze van de literal het type bepalen
  8. 8
    UitdagingVerbreed vóór de vermenigvuldiging
  9. 9
    VoorbeeldBouw een bericht op uit het gevolgde verloop
  10. 10
    UitdagingBepaal wanneer plus optellen betekent
  11. 11
    UitdagingCombineer een gekopieerde waarde met nieuwe uitvoer
  12. 12
    SamenvattingGebruik de nieuwste waarde en het werkelijke type
3

Splits een tijdsduur op en reken met breukdelen

14 stappen
Werk de volgorde van rekenkundige bewerkingen, tijdseenheden, berekeningen met kommagetallen en afrondingskeuzes door.

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

  1. 1
    IntroductieKies de bewerking die bij de vraag past
  2. 2
    UitlegGroepeer een volledige berekening
  3. 3
    UitdagingHerstel een expressie voor een gemiddelde
  4. 4
    VoorbeeldTel volledige uren
  5. 5
    VoorbeeldBehoud de seconden na die uren
  6. 6
    VoorbeeldHaal minuten en seconden eruit
  7. 7
    UitdagingSplits een andere tijdsduur op
  8. 8
    KernpuntAfkappen gaat richting nul
  9. 9
    VoorbeeldBehoud het breukdeel van een meting
  10. 10
    UitlegGebruik Math voor een wortel of macht
  11. 11
    UitdagingKies de afrondingsregel
  12. 12
    TipSchaal terug met een deler met een decimaal
  13. 13
    UitdagingBehoud een gemiddelde voordat je het afrondt
  14. 14
    SamenvattingVolg type en groepering bij elke bewerking
4

Zet waarden op het juiste moment om

11 stappen
Vergelijk verbreding, casts, parsen en de omzetting van getallen naar tekst aan de hand van korte voorbeelden.

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

  1. 1
    IntroductieVraag welke waarde de conversie bereikt
  2. 2
    UitlegVerbreed een numerieke waarde automatisch
  3. 3
    VoorbeeldVergelijk twee plaatsen voor een cast
  4. 4
    UitdagingZet een negatieve waarde om en rond die af
  5. 5
    TipZie een cast niet als een bereikcontrole
  6. 6
    VoorbeeldParseer voordat je optelt
  7. 7
    UitlegStem de parser af op de tekst
  8. 8
    UitdagingVoorspel de resultaten van parsen
  9. 9
    VerbandBereid tekst voor op de weergave
  10. 10
    UitdagingVolg de hele conversieketen
  11. 11
    SamenvattingKies een conversie die bij de taak past
5

Lees, bereken, maak op en test

16 stappen
Bouw een programma dat een hoeveelheid per eenheid berekent en volg daarbij invoer per hele regel, opmaakstrings en nuttige tests.

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

  1. 1
    IntroductieBouw een programma rond de gegevens
  2. 2
    UitlegVerbind één Scanner met toetsenbordinvoer
  3. 3
    VoorbeeldLees een label als een hele regel
  4. 4
    VoorbeeldParseer numerieke regels consequent
  5. 5
    UitdagingHerstel een overgeslagen label
  6. 6
    TipLeg conventies voor numerieke invoer expliciet vast
  7. 7
    VoorbeeldReken met de bedoelde typen
  8. 8
    UitlegStem de opmaakstring af op de waarden
  9. 9
    VoorbeeldGeef een afgeronde meting weer
  10. 10
    UitdagingHerstel de specificatie
  11. 11
    VoorbeeldSla opgemaakte tekst op of lijn die uit
  12. 12
    UitlegKies tests vóór de uitvoering
  13. 13
    UitdagingVind een rekenfout met een test
  14. 14
    TipVolg de eerste onverwachte waarde
  15. 15
    UitdagingPas het plan toe op een snelheid
  16. 16
    SamenvattingControleer de hele weg van invoer naar tekst

Eerste Java-programma’s: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Lees en volg je eerste Java-code10 Oefenvragen

Vraag 1 van 10

Een klassiek programma declareert public class TrailLog. Hoe moet het bronbestand heten?
  1. TrailLog.txt
  2. TrailLog.class
  3. TrailLog.java
  4. TrailLog
Toon antwoordVerberg antwoord
Antwoord: C
De naam van de publieke klasse moet exact overeenkomen met de naam van het bronbestand, gevolgd door .java. TrailLog.java behoudt beide hoofdletters in TrailLog. De extensie .class hoort bij gecompileerde bytecode. Als je de broncode TrailLog.class noemt, haal je het invoerbestand en de uitvoer van de compiler door elkaar.

Vraag 2 van 10

javac Desk.java slaagt. Welke terminalopdracht start de gecompileerde klasse?
  1. java Desk
  2. java Desk.class
  3. javac Desk
  4. Desk.class
Toon antwoordVerberg antwoord
Antwoord: A
Het Java-startprogramma verwacht de naam van de gecompileerde klasse zonder bestandsextensie, dus de opdracht is java Desk. Met .class erbij geef je de klasse niet correct aan het startprogramma door. javac compileert broncode; het voert het programma niet uit en de hoofdletters in de klassenaam moeten ongewijzigd blijven.

Vraag 3 van 10

Welke exacte tekst wordt weergegeven, als / een regeleinde voorstelt?

System.out.print("Gate ");
System.out.println(4);
System.out.print("Open");
  1. Gate /4/Open
  2. Gate4/Open
  3. Gate 4Open
  4. Gate 4/Open
Toon antwoordVerberg antwoord
Antwoord: D
print("Gate ") laat de positie na de spatie staan, dus println(4) maakt de eerste regel af als “Gate 4” en voegt daarna een regeleinde toe. De laatste aanroep geeft “Open” weer op de volgende regel. Als je alles samenvoegt als “Gate 4Open”, mis je het regeleinde dat println toevoegt.

Vraag 4 van 10

Welke waarde bevat saved na deze instructies?

int stock = 8;
int saved = stock;
stock = stock + 6;
  1. 14
  2. 8
  3. 6
  4. 22
Toon antwoordVerberg antwoord
Antwoord: B
De initialisatie kopieert de huidige waarde 8 van stock naar saved. Een latere bijwerking van stock verandert alleen stock, dus saved blijft 8. Als je 14 verwacht, behandel je de toewijzing als een blijvende verbinding tussen de variabelen, maar Java heeft op één moment een waarde gekopieerd.

Vraag 5 van 10

Welk achtervoegsel maakt van 4.25 een float-literal in Java?
  1. L
  2. d
  3. f
  4. Geen achtervoegsel
Toon antwoordVerberg antwoord
Antwoord: C
Het achtervoegsel f geeft de literal het type float, zoals in 4.25f. Zonder achtervoegsel heeft een decimale literal zoals 4.25 het type double, ook als de waarde in een float zou passen. L markeert een long-literal voor een geheel getal en kan van deze decimale literal geen float maken.

Vraag 6 van 10

Wat geeft System.out.println("Seats: " + 6 + 2); weer?
  1. Seats: 8
  2. Seats: 62
  3. Seats: 6 2
  4. Seats: 6+2
Toon antwoordVerberg antwoord
Antwoord: B
De eerste plus voegt de String en 6 samen tot “Seats: 6”. De tweede plus voegt die tekst samen met 2, wat “Seats: 62” oplevert zonder toegevoegde spatie. Voor de uitvoer “Seats: 8” zijn haakjes rond 6 + 2 nodig, zodat de getallen vóór de concatenatie worden opgeteld.

Vraag 7 van 10

Welke waarde wordt toegewezen door int result = 18 - 6 / 3 * 2;?
  1. 14
  2. 8
  3. 16
  4. 2
Toon antwoordVerberg antwoord
Antwoord: A
Delen en vermenigvuldigen hebben voorrang op aftrekken en worden van links naar rechts gegroepeerd. 6 / 3 geeft 2, vermenigvuldigen met 2 geeft 4 en dat aftrekken van 18 geeft 14. De uitkomst 16 behandelt 3 * 2 als de noemer, hoewel er geen haakjes zijn die die bewerking groeperen.

Vraag 8 van 10

Wat is de waarde van de Java-expressie -11 / 4?
  1. -2.75
  2. -3
  3. 2
  4. -2
Toon antwoordVerberg antwoord
Antwoord: D
Beide operanden zijn gehele getallen, dus Java laat het breukdeel weg richting nul en geeft −2 terug. De waarde −3 zou ontstaan door naar beneden af te ronden richting negatieve oneindigheid, wat geheeltallige deling niet doet. Om −2,75 te behouden, moet minstens één operand vóór de deling een zwevendekommatype hebben.

Vraag 9 van 10

Welke expressie geeft bij int total = 19; int groups = 4; een quotiënt met een breukdeel?
  1. (double) (total / groups)
  2. (double) total / groups
  3. total / (int) groups
  4. (int) (total / 4.0)
Toon antwoordVerberg antwoord
Antwoord: B
Een cast op total vóór de deling maakt één operand een double, zodat de deling 4,75 geeft. Een cast op de al voltooide expressie total / groups geeft slechts 4,0 omdat geheeltallige deling het breukdeel heeft weggelaten. Een cast van het uiteindelijke decimale resultaat naar int zou dat breukdeel ook verliezen.

Vraag 10 van 10

Een Scanner ontvangt “27”, Enter, “Mina Chen”, Enter. Wat geeft deze code weer?

int age = scanner.nextInt();
scanner.nextLine();
String first = scanner.next();
String rest = scanner.nextLine();
System.out.println(age + ":" + first + ":" + rest);
  1. 27:Mina:Chen
  2. 27::Mina Chen
  3. 27:Mina: Chen
  4. 27:Mina Chen:
Toon antwoordVerberg antwoord
Antwoord: C
De extra nextLine() leest de lege rest na 27 weg. next() leest daarna “Mina” en de laatste leesactie behoudt de spatie vóór “Chen”, wat “27:Mina: Chen” oplevert. Als je die spatie in de voorspelling weglaat, behandel je nextLine() ten onrechte als een tokenleesactie die witruimte overslaat.
Set 2: Kies typen en verbind invoer met uitvoer10 Oefenvragen

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

Vraag 1 van 10

Waar begint de uitvoering in een klassiek programma?
  1. Bij de eerste import.
  2. Bij de klassedeclaratie.
  3. Bij de laatste instructie in main.
  4. Bij de eerste instructie in main.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een programma compileert en eindigt, maar geeft 4.0 weer voor double average = 19 / 4;. Welke soort fout verklaart het onnauwkeurige gemiddelde?
  1. Een logische fout door geheeltallige deling.
  2. Een uitvoeringsfout door geheeltallige deling.
  3. Een compilatiefout door toewijzing.
  4. Een uitvoeringsfout door overloop.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat zijn left en right na deze poging om waarden te verwisselen?

int left = 2;
int right = 7;
left = right;
right = left;
  1. left = 7, right = 2
  2. left = 2, right = 7
  3. left = 7, right = 7
  4. left = 2, right = 2
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een programma moet het gehele aantal 4.200.000.001 exact opslaan. Welke declaratie doet dit?
  1. int count = 4_200_000_001;
  2. long count = 4_200_000_001L;
  3. long count = 4_200_000_001;
  4. float count = 4_200_000_001f;
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een opname duurt 247 seconden. Welke waarden voor minuten en seconden ontstaan als je die opsplitst in volledige minuten en resterende seconden?
  1. 4 min 11 s
  2. 5 min 7 s
  3. 4 min 7 s
  4. 4 min 47 s
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Welke waarde geeft Math.floor(-4.2) terug?
  1. -4.0
  2. -5.0
  3. 4.0
  4. 5.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

String quantity = "16"; Welke expressie maakt van deze tekst het gehele getal 21?
  1. quantity + 5
  2. (int) quantity + 5
  3. Integer.toString(16) + 5
  4. Integer.parseInt(quantity) + 5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een gebruiker typt de volledige naam “Noor van Dijk” op een nieuwe invoerregel. Welke Scanner-aanroep leest de hele naam in één String?
  1. scanner.nextLine()
  2. scanner.next()
  3. scanner.nextInt()
  4. scanner.nextBoolean()
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Welke tekst geeft System.out.printf("Mass: %.2f kg%n", 6.375); met Amerikaanse opmaak weer vóór het regeleinde?
  1. Mass: 6.37 kg
  2. Mass: 6.375 kg
  3. Mass: 6.38 kg
  4. Mass: 6.375000 kg
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een snelheidsprogramma gebruikt int km = 45; int minutes = 50; double speed = km / minutes * 60;. Het geeft nul weer. Welke vervanging berekent de snelheid in km/h met behoud van de invoer?
  1. double speed = (double) km / minutes * 60;
  2. double speed = (double) (km / minutes) * 60;
  3. double speed = km / minutes * 60.0;
  4. double speed = km / (minutes * 60.0);
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Volg berekeningen en opgemaakte resultaten10 Oefenvragen

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

Vraag 1 van 10

Welke Java-stringliteral geeft de tekst Path: C:\Work weer met precies één backslash?
  1. "Path: C:\Work"
  2. "Path: C:\\Work"
  3. "Path: C:/Work"
  4. "Path: C:\nWork"
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat geeft System.out.println(3 + 4 + " / " + 3 * 4); weer?
  1. 7 / 12
  2. 7 / 34
  3. 34 / 34
  4. 34 / 12
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Welke waarde wordt weergegeven?

int value = 20;
value -= 3 * 2;
value /= 4;
System.out.println(value);
  1. 8
  2. 3.5
  3. 7
  4. 3
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Welke waarde wordt opgeslagen door double value = Math.round(8.276 * 100) / 100;?
  1. 8.28
  2. 8.27
  3. 8.0
  4. 828.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Welke int-waarde levert (int) -6.8 op?
  1. -7
  2. -6
  3. 6
  4. 7
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat gebeurt er wanneer Integer.parseInt(" 58") wordt geëvalueerd?
  1. De methode geeft de int 58 terug.
  2. De methode geeft de String “58” terug.
  3. De methode werpt InputMismatchException op.
  4. De methode werpt NumberFormatException op.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

De invoer is “Lina Park” gevolgd door Enter. Welke String krijgt rest?

String first = scanner.next();
String rest = scanner.nextLine();
  1. " Park"
  2. "Park"
  3. ""
  4. "Lina Park"
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Welke exacte tekst geeft System.out.printf("[%4d][%-5s]", 7, "Oak"); met Amerikaanse opmaak weer?
  1. [7 ][Oak ]
  2. [ 7][ Oak]
  3. [ 7][Oak ]
  4. [ 7][Oak ]
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een programma ontvangt 10,5 liter, gelijk verdeeld over 4 verpakkingen. Het moet het aandeel met breukdeel bewaren voor later gebruik en met Amerikaanse opmaak “2.63 L” weergeven. Welke berekening en uitvoer voldoen aan beide eisen?
  1. int share = (int) (10.5 / 4); System.out.printf(Locale.US, "%.2f L", (double) share);
  2. double share = 10.5 / 4; System.out.printf(Locale.US, "%.2f L", share);
  3. double share = Math.round(10.5 / 4); System.out.printf(Locale.US, "%.2f L", share);
  4. double share = 10.5 / 4; System.out.printf(Locale.US, "%d L", share);
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een timer slaat int seconds = 7_489; op. Welk paar expressies geeft de volledige uren en de resterende hele minuten binnen het huidige uur?
  1. seconds / 3600, seconds / 60
  2. seconds % 3600, seconds / 60
  3. seconds / 3600, seconds % 60
  4. seconds / 3600, seconds % 3600 / 60
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Vind de eerste stap die verkeerd gaat10 Oefenvragen

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

Vraag 1 van 10

Welk leesteken sluit de Java-instructie System.out.println("Ready") af?
  1. Een sluitaccolade: }
  2. Een dubbele punt: :
  3. Een puntkomma: ;
  4. Een komma: ,
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Nadat een cursist één sluitaccolade heeft verwijderd, ziet die meerdere compilatiefouten op latere regels. Wat kan de cursist het beste doen?
  1. De eerste fout en de nabijgelegen accolades bekijken, de ontbrekende accolade herstellen en opnieuw compileren.
  2. Eerst de laatste fout herstellen en daarna elke eerdere regel wijzigen die de compiler noemt.
  3. De laatst gecompileerde klasse herhaaldelijk uitvoeren totdat de compilermeldingen verdwijnen.
  4. De klasse hernoemen en uitvoeren voordat de opgeslagen broncode opnieuw wordt gecontroleerd.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat gebeurt er na var count = 6; als dezelfde methode count = 6.5; uitvoert?
  1. De variabele verandert van int naar double.
  2. Het kommagetal wordt ongemerkt als 6 opgeslagen.
  3. Het programma compileert maar stopt tijdens de uitvoering.
  4. Compilatie mislukt omdat count een int is.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een teller gebruikt int edge = 70_000; long area = edge * edge;. De opgeslagen oppervlakte is verkeerd. Welke vervanging berekent het exacte gehele product en laat edge een int blijven?
  1. long area = (long) (edge * edge);
  2. long area = (long) edge * edge;
  3. long area = (int) edge * edge;
  4. long area = edge * edge + 0L;
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat geeft deze code weer?

int width = 12;
int height = 7;
int total = 2 * (width + height);
total -= 5;
double part = total / 4;
System.out.println(part);
  1. 8.25
  2. 9.0
  3. 8.0
  4. 6.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een rechthoekige driehoek heeft rechthoekszijden van 5 cm en 12 cm. Welke waarde geeft Math.sqrt(5 * 5 + 12 * 12) terug?
  1. 13.0
  2. 17.0
  3. 169.0
  4. 60.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Wat wordt weergegeven?

int value = 9;
value += 2.8;
double result = value / 4;
System.out.println(result);
  1. 2.95
  2. 2.75
  3. 3.0
  4. 2.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Wat geeft Boolean.parseBoolean("Yes") terug?
  1. true, omdat Yes bevestigend is.
  2. false, omdat de tekst niet true is.
  3. De methode werpt NumberFormatException op.
  4. De methode werpt InputMismatchException op.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een test van een secondenomzetter gebruikt 61 seconden en verwacht “1 min 1 s”. Het programma geeft “1 min 61 s” weer. Het gebruikt minutes = totalSeconds / 60; seconds = totalSeconds;. Welke correctie herstelt de berekening?
  1. seconds = totalSeconds / 60;
  2. seconds = minutes % 60;
  3. seconds = totalSeconds % 60;
  4. seconds = totalSeconds - minutes;
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een Scanner gebruikt Locale.US en leest twee regels met double mass = scanner.nextDouble(); String label = scanner.nextLine();. De invoer is “2.75”, Enter, “Sample B”, Enter. Welke wijziging behoudt beide bedoelde waarden?
  1. Gebruik next() voor het label na de numerieke leesactie.
  2. Verwijder Locale.US en laat beide leesacties ongewijzigd.
  3. Lees het label twee keer en voeg de resultaten samen.
  4. Lees de massa met Double.parseDouble(scanner.nextLine()).
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Combineer de regels bij het volgen van complete programma’s10 Oefenvragen

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

Vraag 1 van 10

Welke escapesequentie zet een dubbel aanhalingsteken binnen een gewone Java-stringliteral?
  1. \n
  2. \t
  3. \"
  4. \\
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat geeft deze code weer?

int a = 4;
int b = 7;
String text = "R=" + a + b;
a += 2;
text += ":" + (a + b);
System.out.println(text);
  1. R=47:13
  2. R=11:13
  3. R=67:13
  4. R=47:67
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een werkplaats heeft 83 onderdelen. In elke bak passen 15 onderdelen. Hoeveel volle bakken en overgebleven onderdelen zijn er?
  1. 5 bakken en 3 onderdelen
  2. 6 bakken en 8 onderdelen
  3. 6 bakken en 7 onderdelen
  4. 5 bakken en 8 onderdelen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Welke waarde wordt weergegeven?

int number = 6_843;
int last = number % 10;
number /= 10;
int next = number % 10;
System.out.println(last * 10 + next);
  1. 34
  2. 43
  3. 84
  4. 33
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Welke expressie zet het resultaat van 2 optellen bij de tekencode van 'C' weer om naar het teken 'E'?
  1. (char) 'C' + 2
  2. (char) ('C' + 2)
  3. (int) ('C' + 2)
  4. "C" + 2
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat geeft deze code weer?

int total = 23;
int count = 4;
double a = (double) (total / count);
double b = (double) total / count;
System.out.println((int) (b - a) + ":" + b);
  1. 1:5.75
  2. 0:5.0
  3. 0:5.75
  4. 1:5.0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een Scanner met Locale.US ontvangt “3 2.5”, Enter, “West Lab”, Enter. Welke waarden krijgen name en full?

int count = scanner.nextInt();
double mass = scanner.nextDouble();
String name = scanner.nextLine();
String full = scanner.nextLine();
  1. name = "West", full = " Lab"
  2. name = "West Lab", full = ""
  3. name = "", full = "West"
  4. name = "", full = "West Lab"
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Welke tekst wordt met Amerikaanse opmaak opgeslagen in line?

String line = String.format("%d%% / %.1f", 25, 4.25);
  1. 25% / 4.2
  2. 25% / 4.3
  3. 25%% / 4.3
  4. 25% / 4.250000
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een programma leest op afzonderlijke regels twee toetsscores als gehele getallen, 11 en 14. Het moet hun gemiddelde met breukdeel opslaan en “Mean: 12.50” weergeven met een afsluitend regeleinde, op elke computer met een punt. Welke code voor invoer, berekening en uitvoer voldoet aan deze eisen? Een Scanner met de naam scanner staat klaar en Locale is geïmporteerd.
  1. int a = scanner.nextInt(); int b = scanner.nextInt(); double mean = (a + b) / 2; System.out.printf(Locale.US, "Mean: %.2f%n", mean);
  2. int a = Integer.parseInt(scanner.nextLine()); int b = Integer.parseInt(scanner.nextLine()); double mean = (a + b) / 2.0; System.out.printf("Mean: %.2f%n", mean);
  3. int a = Integer.parseInt(scanner.nextLine()); int b = Integer.parseInt(scanner.nextLine()); double mean = (a + b) / 2.0; System.out.printf(Locale.US, "Mean: %.2f%n", mean);
  4. int a = Integer.parseInt(scanner.nextLine()); int b = Integer.parseInt(scanner.nextLine()); double mean = (a + b) / 2.0; System.out.println("Mean: " + mean);
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een programma geeft de reistijd van een route weer als hele uren en resterende minuten, afgerond op de dichtstbijzijnde minuut. Welke uitvoer moet het geven voor 121,5 km met een constante snelheid van 54 km/h?
  1. 2 h 15 min
  2. 2 h 25 min
  3. 2 h 0 min
  4. 3 h 0 min
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

75 Kernbegrippen, elk met een definitie

A

Afkappen
Afkappen laat het breukdeel weg richting nul wanneer een zwevendekommawaarde binnen het bereik wordt omgezet naar een geheel getal.
Een cast van -8,6 naar int geeft door afkapping -8, terwijl naar beneden afronden -9 zou geven.
Afronden
Afronden vervangt een waarde door een nabijgelegen waarde met een gekozen precisie; Math.round gebruikt het dichtstbijzijnde gehele getal en rondt waarden precies halverwege naar boven af.
Een tijd afronden op hele minuten kan nadat je de tijdsduur als double in minuten hebt berekend.

B

Blok
Een blok is een groep instructies tussen bij elkaar horende accolades, waardoor Java ze als één geheel kan behandelen.
De accolades na de main-methodekop omsluiten de instructies die bij de body van die methode horen.
boolean
Het type boolean slaat een van de twee waarheidswaarden true en false op en accepteert geen getallen als vervanging.
De declaratie boolean isMember = true; slaat een waarheidswaarde op zonder aanhalingstekens of een getal te gebruiken.
Broncode
Broncode is de voor mensen leesbare Java-tekst die in een .java-bestand is opgeslagen voordat de compiler die vertaalt voor uitvoering.
Als je een bericht in de broncode wijzigt, verandert het volgende gecompileerde programma nadat je hebt opgeslagen en gecompileerd.
Bytecode
Bytecode is de gecompileerde vorm van instructies die in Java-.class-bestanden wordt opgeslagen en door een geschikte Java Virtual Machine wordt uitgevoerd.
Een geslaagde compilatie maakt bytecode die het startprogramma java via de JVM kan uitvoeren.

C

char
Het type char slaat één UTF-16-code-eenheid van 16 bits op, die je als literal tussen enkele aanhalingstekens schrijft en die een nummer van 0 tot 65.535 heeft.
Het teken '7' heeft code 55, dus als je het als char opslaat, wordt het niet de gehele waarde 7.
Commentaar
Commentaar is verklarende brontekst die de compiler negeert en die na // of tussen /* en */ staat.
Het commentaar // Convert to minutes legt uit waarom een tijdberekening een waarde in uren met 60 vermenigvuldigt.
Compilatiefout
Een compilatiefout is een overtreding die wordt ontdekt terwijl Java broncode controleert en die verhindert dat die broncode met succes wordt gecompileerd.
Een niet-afgesloten gewone stringliteral veroorzaakt een compilatiefout voordat het programma kan worden uitgevoerd.
Compiler
Een compiler controleert broncode aan de hand van taalregels en vertaalt geldige code naar een andere vorm, zoals Java-bytecode.
Met javac Notice.java roep je de compiler aan, die een fout meldt als een puntkomma ontbreekt.
Concatenatie
Concatenatie voegt waarden samen tot een nieuwe String en zet een operand die geen String is om naar tekst wanneer de andere operand een String is.
De concatenatie "Count: " + 8 bouwt één bericht met een label, een spatie en een cijfer.
Constante
Een constante is een vaste waarde; een Java-variabele met final kan één keer een waarde krijgen en daarna niet opnieuw worden toegewezen.
De constante MINUTES_PER_HOUR geeft het getal 60 een nuttige naam in berekeningen voor tijdomrekening.

D

Declaratie
Een declaratie introduceert de naam en het type van een variabele; de declaratie kan ook een initialisatiewaarde bevatten die een beginwaarde geeft.
De declaratie int count; introduceert een naam, maar count heeft nog een waarde nodig voordat de variabele wordt gelezen.
Decrement
Een decrement verlaagt de waarde van een variabele met één; de Java-operator -- voert deze bijwerking uit zonder afzonderlijke toewijzing met aftrekking.
De instructie secondsLeft--; vermindert het opgeslagen aantal resterende seconden met precies één.
Deeltal
Een deeltal is de waarde die wordt gedeeld, links van / of % in een Java-delingsexpressie met twee operanden.
In -11 % 4 verklaart het negatieve deeltal waarom ook de rest ongelijk aan nul negatief is.
double
Het type double slaat binaire zwevendekommawaarden van 64 bits op en bewaart gewoonlijk ongeveer 15–17 significante decimale cijfers.
Een afstand van 18,75 km kan worden opgeslagen als double, zodat latere berekeningen breukdelen in resultaten kunnen behouden.
Double.parseDouble
De methode Double.parseDouble zet geldige zwevendekommatekst om naar een double met een decimale punt, ongeacht de taal- en regio-instelling.
Een hele invoerregel met “2.75” kan als double worden geparseerd op systemen met een decimale punt of komma.

E

Escapesequentie
Een escapesequentie is een code die met een backslash begint binnen een literal en die een teken voorstelt, zoals een nieuweregelteken of een aanhalingsteken.
Met de escapesequentie kan één aanroep voor uitvoer het volgende deel van het bericht op een andere regel plaatsen.
Expliciete typeconversie (cast)
Een expliciete typeconversie vraagt uitdrukkelijk om een typeconversie door het doeltype tussen haakjes vóór de om te zetten waarde te plaatsen.
In (double) total / count verandert de cast het type van een operand voordat de deling wordt uitgevoerd.
Expressie
Een expressie is Java-code die een waarde berekent of een bewerking uitvoert, zoals twee waarden optellen of een methode aanroepen.
De expressie width * height berekent een oppervlakte die je kunt toewijzen of kunt doorgeven aan een aanroep voor uitvoer.

F

float
Het type float slaat binaire zwevendekommawaarden van 32 bits op met een precisie van ongeveer zeven significante decimale cijfers.
Het achtervoegsel f in 2.75f markeert een float-literal, terwijl 2.75 zonder achtervoegsel een double-literal is.

G

Geheeltallige deling
Geheeltallige deling deelt twee gehele operanden en laat een eventueel breukdeel van het quotiënt weg richting nul.
De Java-expressie 23 / 5 geeft 4 volledige groepen en laat het breukdeel uit het quotiënt weg.

I

Increment
Een increment verhoogt de waarde van een variabele met één; de Java-operator ++ voert deze bijwerking in één instructie uit.
Een zelfstandige count++; verandert een opgeslagen aantal van 8 naar 9 voordat de volgende instructie wordt uitgevoerd.
Initialisatie
Initialisatie geeft een variabele de eerste waarde, vaak in dezelfde instructie die de naam en het type van de variabele declareert.
De regel double speed = 72.5; declareert speed en initialiseert die met een meting in km/h.
InputMismatchException
Een InputMismatchException is een uitvoeringsexceptie van een Scanner-tokenleesactie wanneer het token niet bij het gevraagde type past.
Als je “3.5” typt voor een aanroep van nextInt(), ontstaat InputMismatchException omdat een geheel getal vereist is.
Instructie
Een instructie is een Java-opdracht, zoals een toewijzing of een methodeaanroep; een instructie voor uitvoer eindigt met een puntkomma.
De regel System.out.println("Ready"); is één instructie die een bericht en een regeleinde weergeeft.
int
Het type int slaat gehele getallen van 32 bits met teken op, van −2.147.483.648 tot en met 2.147.483.647.
Een klein voorraadaantal past in een int, maar een aantal boven het maximum heeft een groter geheel type nodig.
Integer.parseInt
De methode Integer.parseInt zet geldige tekst met een geheel getal om naar een int en wijst ongeldige tekst af met NumberFormatException.
Integer.parseInt("72") geeft 72 terug, maar een spatie vooraan toevoegen maakt die tekst met een geheel getal ongeldig.
Invoer–berekening–uitvoerplan
Een invoer–berekening–uitvoerplan bepaalt wat een programma leest, hoe het die waarden verwerkt en welke resultaten het presenteert.
Een snelheidsberekening leest afstand en tijd, deelt die met bij elkaar passende eenheden en voorziet het resultaat van een label.

J

JDK
De JDK, oftewel Java Development Kit, is de softwareverzameling die hulpmiddelen voor Java-ontwikkeling levert, waaronder javac en java.
Een computer heeft een JDK nodig om de broncode vanuit een terminal te compileren en daarna het resulterende programma te starten.
JVM
De JVM, oftewel Java Virtual Machine, is het uitvoeringssysteem dat Java-bytecode op een bepaalde computer uitvoert.
Hetzelfde compatibele klassebestand kan worden uitgevoerd op verschillende besturingssystemen met een geschikte JVM.

K

Klasse
Een klasse is een benoemde Java-programmastructuur waarvan de body leden zoals methoden bevat; een klassiek eerste programma declareert één klasse.
De declaratie public class Greeting opent de klasse die de main-methode van het programma bevat.

L

Lege string
Een lege string is een String zonder tekens, geschreven als twee dubbele aanhalingstekens direct naast elkaar zonder iets ertussen.
Als je begint met "" + 'A' + 'B', bouwen de plusbewerkingen tekst op en krijg je de String “AB”.
Literal
Een literal is een waarde die rechtstreeks in broncode is geschreven, waarbij de vorm en het achtervoegsel het type van die geschreven waarde bepalen.
De literals 8, 8L en 8.0 drukken vergelijkbare hoeveelheden uit maar hebben de typen int, long en double.
Logische fout
Een logische fout is een fout waardoor een programma een onjuist resultaat oplevert, hoewel het compileert en de uitvoering voltooit.
Als een programma een gemiddelde van 4,0 weergeeft terwijl het verwachte resultaat 4,75 is, wijst dat op een logische fout in de berekening.
long
Het type long slaat gehele getallen van 64 bits met teken op en is nuttig wanneer een exact geheel getal het bereik van int kan overschrijden.
Het achtervoegsel in 5_000_000_000L maakt een literal waarmee je een groot geheel aantal kunt initialiseren.

M

main-methode
De main-methode is de startmethode waar het Java-startprogramma begint met het uitvoeren van de instructies in een klein programma.
Als je twee instructies voor uitvoer binnen main plaatst, verschijnen hun berichten in de geschreven volgorde.
Math-klasse
De Math-klasse levert kant-en-klare statische methoden en constanten voor numeriek werk, waaronder wortels, machten en afronden.
De aanroep Math.sqrt(81) vindt een vierkantswortel zonder import of methodedefinitie.

N

NaN
NaN, wat “geen getal” betekent, is een speciaal zwevendekommaresultaat voor een ongedefinieerde numerieke bewerking zoals nul gedeeld door nul.
De double-berekening 0.0 / 0 levert NaN op in plaats van een exceptie voor geheeltallige deling op te werpen.
nextLine
De methode nextLine leest de resterende tekst op de huidige invoerregel en verwerkt het regeleinde zonder dat terug te geven.
Na een token met een geheel getal aan het einde van een regel kan nextLine() direct een lege String teruggeven.
NumberFormatException
Een NumberFormatException is een uitvoeringsexceptie die wordt opgeworpen wanneer numeriek parsen de aangeboden tekst niet naar het gevraagde type kan omzetten.
Als je “eight” probeert te parsen met Integer.parseInt, ontstaat tijdens de uitvoering NumberFormatException.

O

Operand
Een operand is een waarde of expressie die aan een operator wordt aangeboden; de typen van de operanden helpen bepalen welke bewerking Java uitvoert.
In "N=" + count zorgt de String-operand ervoor dat plus tekst samenvoegt in plaats van twee getallen op te tellen.
Operatorprioriteit
Operatorprioriteit is de voorrang die bepaalt hoe bewerkingen worden gegroepeerd wanneer een expressie verschillende operatoren bevat.
Vermenigvuldiging heeft voorrang op optelling in 4 + 3 * 2, dus het product wordt eerst gevormd.
Opmaakprecisie
Opmaakprecisie bepaalt het detail in opgemaakte uitvoer; bij %f stelt die het aantal cijfers na het decimaalteken in.
De precisie in %.2f maakt van een weergegeven 4,5 de tekst “4.50” zonder de numerieke variabele te wijzigen.
Opmaakspecificatie
Een opmaakspecificatie is een instructie binnen een opmaakstring die met een procentteken begint, zoals %d voor een geheel getal of %n voor een regeleinde.
Elke %f verwerkt een zwevendekommawaarde, terwijl %n een regelscheidingsteken toevoegt zonder een waarde te verwerken.
Opmaakstring
Een opmaakstring combineert letterlijke tekst met specificaties die met een procentteken beginnen en bepalen waar en hoe opgegeven waarden verschijnen.
De opmaakstring "Mass: %.2f kg%n" plaatst een meting met twee decimalen tussen het label en de eenheid.
Overloop bij gehele getallen
Overloop bij gehele getallen ontstaat wanneer een berekening met gehele getallen het bereik van het type overschrijdt en doorloopt naar een andere waarde.
Bij het vermenigvuldigen van twee grote int-waarden kan overloop optreden voordat hun product aan een long-variabele wordt toegewezen.

P

Parsen
Parsen interpreteert tekst volgens een formaat en zet die om naar een bruikbare waarde, zoals een int of een double.
Als je de String “72” parseert, kan een programma er 8 numeriek bij optellen in plaats van de tekst “728” op te bouwen.
Plafondfunctie (ceiling)
De plafondfunctie geeft het kleinste gehele getal dat niet kleiner is dan de ingevoerde waarde; Math.ceil geeft dit terug als double.
Voor 4,2 groepen is de uitkomst van de plafondfunctie 5,0, het volgende gehele getal in opwaartse richting.
Precisie
Precisie beschrijft hoeveel significante details een numeriek type kan weergeven; een groot bereik garandeert geen exacte waarden.
Een grote int omzetten naar float kan precisie verminderen, ook al staat Java de verbredende conversie toe.
Primitief type
Een primitief type is een van de acht ingebouwde waardetypen van Java: byte, short, int, long, float, double, char of boolean.
Een aantal dat als int is opgeslagen, gebruikt een primitief type, terwijl een naam die als String is opgeslagen een klassetype gebruikt.
print
De methode print schrijft een waarde naar de uitvoer zonder een regeleinde toe te voegen, zodat de volgende uitvoer op dezelfde regel blijft.
Met print("Name: ") kan een gebruiker een antwoord direct naast de invoervraag op het scherm typen.
printf
De methode printf schrijft waarden volgens een opmaakstring en voegt alleen een regeleinde toe als die string daarom vraagt.
Met printf("%d items%n", 8) geef je het aantal, het woord “items” en een afsluitend regelscheidingsteken weer.
println
De methode println schrijft een waarde gevolgd door een regeleinde; zonder argument schrijft de methode alleen het regeleinde.
Twee opeenvolgende aanroepen van println geven twee afzonderlijke regels weer, ook als de literals geen nieuweregeltekens bevatten.

R

Rest
Een rest is de waarde die na geheeltallige deling overblijft; de Java-operator % geeft een resultaat ongelijk aan nul met het teken van het deeltal.
Bij 23 onderdelen die in groepen van 5 worden verpakt, geeft 23 % 5 de 3 onderdelen buiten de volledige groepen.

S

Samengestelde toewijzing
Een samengestelde toewijzing combineert een bewerking met een toewijzing en bevat een conversie terug naar het type van de variabele links.
De instructie total += 5; verhoogt een int-totaal met 5 en slaat de bijgewerkte waarde op in total.
Scanner
Een Scanner is een Java-klasse die invoer als regels of tokens leest en tokens kan omzetten naar primitieve waarden zoals getallen.
Een Scanner die is verbonden met System.in, kan de naam van een gebruiker lezen en de metingen die een programma nodig heeft.
String
Een String is een Java-klassetype voor een reeks teksttekens, waaronder de geldige lege reeks die je schrijft als "".
Een String kan het label “Room 204” bevatten zonder de cijfers ervan te behandelen als een getal om mee te rekenen.
String.format
De methode String.format past een opmaakstring toe en geeft de resulterende tekst terug in plaats van die direct weer te geven.
Een programma kan String.format(Locale.US, "%.1f km", 8.25) opslaan en die tekst later weergeven.
Stringliteral
Een stringliteral is tekst tussen dubbele aanhalingstekens in Java-broncode, met escapesequenties voor speciale tekens.
De stringliteral "Hello, team" bevat een komma en een spatie die exact zo in de uitvoer verschijnen.

T

Taal- en regio-instelling (locale)
Een taal- en regio-instelling bepaalt conventies zoals het decimaalteken bij numerieke invoer en opmaak.
Als je een Scanner instelt op Locale.US, wordt invoer met een decimale punt consistent op verschillende computers.
Testgeval
Een testgeval specificeert invoer en een verwacht resultaat, zodat je het werkelijke gedrag van een programma kunt vergelijken met een bekend antwoord.
Het testgeval 120 km met 60 km/h verwacht 2 h 0 min van een programma dat reistijd omzet.
Toewijzing
Een toewijzing evalueert een expressie rechts en slaat de waarde op in de variabele of andere opslagplaats links.
Na count = count + 2; bevat count twee meer dan de waarde die de variabele vóór die instructie bevatte.
Token
Een token is een stuk invoer dat door een scheidingsteken wordt gescheiden; een Scanner met standaardinstellingen gebruikt witruimte om tokens te scheiden.
De invoer “4 7” bevat twee numerieke tokens die twee opeenvolgende aanroepen van nextInt() kunnen lezen.
Traceertabel
Een traceertabel legt variabelewaarden na opeenvolgende instructies vast, zodat je veranderingen kunt volgen zonder de code uit te voeren.
Een traceertabel voor een verwisseling toont welke oorspronkelijke waarde in de tijdelijke variabele wordt bewaard.
Tussenwaarde
Een tussenwaarde is een resultaat dat tijdens een berekening vóór het definitieve antwoord ontstaat en nuttig is om te volgen waar een fout begint.
Als je de tussenwaarde totalMinutes weergeeft, kun je zien of een verkeerde opsplitsing van de tijd al vóór de deling begon.

U

Uitvoeringsfout
Een uitvoeringsfout is een fout tijdens de uitvoering van een programma, vaak gemeld als een exceptie die het draaiende programma stopt.
Delen door een variabele van een geheel type met de waarde nul veroorzaakt een uitvoeringsfout bij de delingsinstructie.

V

Variabele
Een variabele is een benoemde opslagplaats voor een waarde van een bepaald type, zodat latere instructies de opgeslagen waarde kunnen lezen of bijwerken.
De variabele distanceKm slaat een meting op die een latere tijdberekening door de snelheid deelt.
Veldbreedte
Een veldbreedte is het minimumaantal tekens dat voor een opgemaakte waarde wordt gereserveerd, waarbij spaties worden toegevoegd als de waarde korter is.
Als je 7 opmaakt met %4d, verschijnen drie spaties vóór het cijfer om het veld van vier tekens te vullen.
Verbredende typeconversie
Een verbredende typeconversie is een automatische numerieke conversie langs de toegestane typeroutes van Java, zoals van int naar long of double.
Als je een int-aantal toewijst aan een double-meting, wordt het automatisch omgezet en ontstaat een decimale vorm.
Versmallende typeconversie
Een versmallende typeconversie gaat naar een beperktere numerieke representatie, zoals van double naar int, en kan informatie verliezen.
De omzetting van 6,75 naar int is versmallend omdat het doeltype het breukdeel niet kan behouden.
Verwachte uitvoer
Verwachte uitvoer bestaat uit de tekst en waarden die een correct programma voor opgegeven invoer moet opleveren, vóór de test berekend.
Als je verwachte uitvoer vergelijkt met werkelijke uitvoer, kun je een verkeerd getal, een ontbrekende eenheid of een extra spatie ontdekken.
Vloerfunctie (floor)
De vloerfunctie geeft het grootste gehele getal dat niet groter is dan de ingevoerde waarde; Math.floor geeft dit terug als double.
Voor een negatief getal met een breukdeel zoals -4,2 is de uitkomst van de vloerfunctie -5,0, wat daaronder ligt op de getallenlijn.

W

Wetenschappelijke notatie
Wetenschappelijke notatie geeft een getal weer als een coëfficiënt vermenigvuldigd met een macht van tien, met E in waarden die Java weergeeft.
De weergegeven waarde 1.0E-4 stelt 0,0001 voor, dus de negatieve exponent beschrijft een kleine grootte.

Z

Zwevendekommabenadering
Een zwevendekommabenadering is een nabijgelegen weer te geven binaire waarde die wordt gebruikt wanneer een decimale breuk niet exact kan worden opgeslagen.
Kleine extra decimalen aan het einde van 1.1 * 3 laten zwevendekommabenadering in het weergegeven resultaat zien.

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