Gyakorlati alapok
Feltételvizsgálat egyszerűbben
Az előző, Az állapotjelzők (flag) című fejezet ismertette a legtöbbször boolean típusban használt flag-ek, állapotjelzők funkcióját, kezelését. Ebben a rövid fejezetben csupán ezen állapotjelzők egyszerűsített használatára szeretném felhívni a figyelmet. Induljunk ki a prímszámkeresés már ismertetett algoritmusából:
import java.util.Scanner;
import java.math.*;
public class Main {
public static void main(String[] args) {
int szam;
boolean prim = true;
Scanner in = new Scanner(System.in);
System.out.println("Kérem, hogy gépelje be a számot (0 és 1
nem prímszám)!");
szam = in.nextInt();
if (szam == 1 || szam == 0 || szam % 2 == 0){
System.out.println(szam + " nem
prímszám!");
prim = false;
}
else
for (int j = 2; j <= Math.sqrt(szam);
j++){
if (szam % j
== 0){
prim = false;
System.out.println(szam + " nem prímszám!");
break;
}
}
if(prim == true)
System.out.print(szam + " prímszám");
}
}
Végeredmény (például):
Kérem, hogy gépelje be a számot (0 és 1 nem prímszám)!
23
23 prímszám
A boolean típusú prim változó értékadása több helyen is megtörténik, sőt az algoritmus végén van 1 fontos értékvizsgálat is:
if(prim == true)
Általános programozás-technikai konvenció, hogy boolean típusnál a fenti helyett egyszerűsített értékvizsgálatot használunk-használhatunk:
if(prim)
A 2 értékvizsgálat hatása ugyanaz, ebből következően az alábbi, ilyen módon módosított prímszámkeresési algoritmus szintén működőképes:
import java.util.Scanner;
import java.math.*;
public class Main {
public static void main(String[] args) {
int szam;
boolean prim = true;
Scanner in = new Scanner(System.in);
System.out.println("Kérem, hogy gépelje be a számot (0 és 1
nem prímszám)!");
szam = in.nextInt();
if (szam == 1 || szam == 0 || szam % 2 == 0){
System.out.println(szam + " nem
prímszám!");
prim = false;
}
else
for (int j = 2; j <= Math.sqrt(szam);
j++){
if (szam % j
== 0){
prim = false;
System.out.println(szam + " nem prímszám!");
break;
}
}
if(prim)
System.out.print(szam + " prímszám");
}
}
Végeredmény (például):
Kérem, hogy gépelje be a számot (0 és 1 nem prímszám)!
17
17 prímszám
További érdekes és alapjában véve nem konvencionális lehetőség, hogy boolean adattípus true és false értékeit felhasználhatjuk deklarálás nélkül is. Alább egy ilyen jellegű, futtatható Java-kódot vizsgálhatunk. A végtelen ciklus hajtómotorja az elöltesztelős while(true) feltétel, bár a while(false) feltételnek ebben az esetben egyszerűen nincs is értelme, hiszen a cikluson belül elérhetetlen kódot eredményezne (unreachable code). A cikluson belüli folyamatok egészen addig tartanak, amíg azokat a System.exit(0) függvény meg nem szakítja:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String[] menu = new String[] {"1 - Kiírás", "0 - Kilépés"};
while(true){
System.out.println("\nKérem válasszon
az alábbi lehetőségekből: ");
for(int i = 0; i < menu.length; i++)
{
System.out.println(menu[i]);
}
String valasztas = in.nextLine();
if("1".equals(valasztas)) {
System.out.println("Jó móka ez a Java-programozás!");
}
if("0".equals(valasztas)) {
System.out.println("\nViszlát!");
System.exit(0);
}
}
}
}
Végeredmény (például):
Kérem válasszon az alábbi lehetőségekből:
1 - Kiírás
0 - Kilépés
X
Kérem válasszon az alábbi lehetőségekből:
1 - Kiírás
0 - Kilépés
1
Jó móka ez a Java-programozás!
Kérem válasszon az alábbi lehetőségekből:
1 - Kiírás
0 - Kilépés
s
Kérem válasszon az alábbi lehetőségekből:
1 - Kiírás
0 - Kilépés
0
Viszlát!