In het onderstaande voorbeeld wordt de leeftijd aan de gebruiker gevraagd en komt er meerderjarig als de leeftijd groter is of gelijk aan 18.
private void btnBerekenActionPerformed(java.awt.event.ActionEvent evt) {
// Invoer
int leeftijd = Integer.parseInt(txtLeeftijd.getText());
// Verwerkering
String resultaat = "";
if (ileeftijd >= 18){
resultaat = "Meerderjarig";
}
// Uitvoer
txtResultaat.setText(resultaat);
}
Het if-statement test de waarde van het ingevoerde getal. Als het getal een waarde groter of gelijk aan 18 heeft, dan wordt het statement tussen accolades uitgevoerd. Vervolgens worden alle statements na de sluitaccolade in volgorde uitgevoerd. Aan de andere kant, als het getal kleiner is dan 18, wordt het statement tussen accolades genegeerd en worden alle statements na de sluithaak in volgorde uitgevoerd.
Merk op dat de te testen voorwaarde tussen haakjes staat: dit is een van de grammaticaregels van Java.
Merk ook op dat een test op gelijkheid de ==-operator gebruikt (en niet de =-operator, die voor toekenning wordt gebruikt).
Het if-statement bestaat uit twee delen:
De voorwaarde die onderzocht moet worden
Het statement of de reeks statements die moeten worden uitgevoerd als aan de voorwaarde is voldaan
Alle programma’s bestaan uit een reeks handelingen, waarvan de volgorde in het voorbeeld duidelijk is:
Er wordt een stuk tekst via een tekstveld ingevoerd
Vervolgens voert het programma een test uit
Indien van toepassing komt er een melding dat de gebruiker meerderjarig is.
Als de test positief uitvalt, willen we het programma vaak niet slechts één handeling, maar verschillende handelingen laten uitvoeren, en al deze handelingen komen in de code tussen de accolades te staan.
if … else
Het komt ook voor, dat we twee groepen opdrachten willen specificeren: één die het programma uitvoert
als aan de voorwaarde is voldaan en één als dit niet het geval is. We passen het voorgaande programma zo
aan dat wanneer de gebruiker een leeftijd kleiner dan 18 ingeeft, er als resultaat Minderjarig komt.
private void btnBerekenActionPerformed(java.awt.event.ActionEvent evt) {
// Invoer
int leeftijd = Integer.parseInt(txtLeeftijd.getText());
// Verwerking
String resultaat = "";
if (leeftijd >= 18){
resultaat = "Meerderjarig";
}
else {
resultaat = "Minderjarig";
}
// Uitvoer
txtUitvoer.setText(resultaat);
}
Het if-statement in dit programma bestaat uit drie delen:
De voorwaarde die onderzocht moet worden (in dit geval of de leeftijd hoger is dan 17)
Het statement of de statements tussen accolades die moeten worden uitgevoerd als aan de voorwaarde is voldaan
Het statement of de statements tussen accolades die moeten worden uitgevoerd als niet aan de voorwaarde niet is voldaan
Het is echter beter het voorgaande als volgt te herschrijven
private void btnBerekenActionPerformed(java.awt.event.ActionEvent evt) {
// Invoer
int leeftijd = Integer.parseInt(txtLeeftijd.getText());
// Verwerking
String resultaat = "Meerderjarig";
if (leeftijd < 18){
resultaat = "Minderjarig";
}
// Uitvoer
txtUitvoer.setText(resultaat);
}
Geneste if-statements
Bekijk het volgende programmafragment:
private void btnBerekenActionPerformed(java.awt.event.ActionEvent evt) {
// Invoer
int leeftijd = Integer.parseInt(txtLeeftijd.getText());
// Verwerking
String resultaat = "";
if (leeftijd < 6){
strResultaat = "Kleutertarief";
}
else {
if (leeftijd < 16){
resultaat = "Kindertarief";
}
else {
resultaat = "Volwassenentarief";
}
// Uitvoer
txtResultaat.setText(resultaat);
}
Het tweede if-statement staat volledig binnen het eerste. Door het inspringen is dit duidelijk te zien. Dit heet nesten. Nesten is iets anders dan inspringen, maar inspringen zorgt er wel voor dat het nesten duidelijk naar voren komt. De betekenis van dit deel van het programma is het volgende:
Als de leeftijd lager dan 6 is, dan geldt het kleutertarief
In andere gevallen, als de leeftijd lager dan 16 is, dan geldt het kindertarief
In andere gevallen, als aan geen van deze voorwaarden voldaan is, dan geldt het volwassenentarief
Nesten komt regelmatig voor in programma’s, maar een dergelijk programma is complexer zodat het niet zo gemakkelijk te begrijpen is. Dit gedeelte van het programma kan worden herschreven door een bijzonder type geneste if-statements, de else if, te gebruiken:
private void btnBereken(java.awt.event.ActionEvent evt) {
// Invoer
int leeftijd = Integer.parseInt(txtLeeftijd.getText());
// Verwerking
String resultaat = "";
if (leeftijd < 6){
resultaat = "Kleutertarief";
}
else if (leeftijd < 16){
resultaat = "Kindertarief";
}
else {
resultaat = "Volwassenentarief";
}
// Uitvoer
txtResultaat.setText(resultaat);
}
Deze versie is exact hetzelfde als de versie erboven, met alleen dit verschil dat het inspringen anders is en dat enkele paren accolades geëlimineerd zijn. Dit komt omdat je, wanneer er na een voorwaarde slechts één statement wordt uitgevoerd, de accolades weg mag laten. Dit is het enige geval waarin het ook aanbevolen is om de accolades weg te laten.
Het voorgaande kan nog iets korter geschreven worden, door een defaultwaarde te voorzien voor het resultaat.
private void btnBereken(java.awt.event.ActionEvent evt) {
// Invoer
int leeftijd = Integer.parseInt(txtLeeftijd.getText());
// Verwerking
String resultaat = "Volwassenentarief";
if (leeftijd < 6){
resultaat = "Kleutertarief";
}
else if (leeftijd < 16){
resultaat = "Kindertarief";
}
// Uitvoer
txtResultaat.setText(resultaat);
}
Hieronder staat nog een vierde versie van dit programmagedeelte. Soms is het mogelijk om een programma uit te schrijven met behulp van de logische operatoren. Zo wordt hier bijvoorbeeld hetzelfde resultaat als in het eerste fragment bereikt, maar dan zonder nesten. Let er wel op dat in dit geval alle if-statements overlopen worden.
private void btnBereken(java.awt.event.ActionEvent evt) {
// Invoer
int leeftijd = Integer.parseInt(txtLeeftijd.getText());
// Verwerking
String resultaat = "";
if (leeftijd < 6){
resultaat = "Kleutertarief";
}
if ((leeftijd >= 6) && (leeftijd < 16)){
resultaat = "Kindertarief";
}
if (leeftijd >= 16){
resultaat = "Volwassenentarief";
}
// Uitvoer
txtResultaat.setText(resultaat);
}
Dit zijn dus verschillende programmafragmenten die hetzelfde eindresultaat opleveren, twee die gebruik maken van nesten en één die er geen gebruik van maakt. Er zijn mensen die beweren dat nesten moeilijk te begrijpen is, daardoor snel tot fouten leidt en dus vermeden moet worden. Nesten kan vaak vermeden worden door logische operatoren te gebruiken.