Gyakorlati alapok
Különutas tartalmaz-e?
Ebben a fejezetben folytatjuk az előző fejezetekben gyakorolt különutas (értsd: külön eljárásos és/vagy külön függvényes) kódszerkezettel implementált problémák megoldását. Ugorjon elénk a következő probléma:
Ellenőrizzük le, hogy a bekért szó vagy mondat tartalmazza-e a keresett karaktert! A validálást külön metódusban valósítsuk meg!
Ha a Tisztelt Olvasó figyelmét esetleg elkerülte: validálás (validation) során előre jól meghatározott szempontok szerint ellenőrizzük le a bemeneti adatot. Ezáltal kerüljük el, hogy a további, az adatokat feldolgozó algoritmusokba rossz formai vagy tartalmi elemek kerüljenek.
Ebben a rövid példában a validálásnak csupán 1 szempontja van: a bemeneti String tartalmazza-e a keresett karaktert.
Jegyezzük meg, hogy ilyen egyszerű validáló alapfeltétel a valós ipari kódkörnyezetben legtöbbször nem fordul elő, mert lényegében közvetlenül "életveszélyes" az őt felhasználó algoritmusokra. A validálás az egyik legbonyolultabb programozási feladat.
A kód kulcsa a boolean típusú validáló metódus, még pedig külön függvénybe illesztve. Ebből következően a metódus 2 db bemeneti adatot vár:
-
bemeneti szót vagy mondatot,
-
a keresett karaktert.
Ezután ellenőrzi, hogy a bemeneti szó vagy mondat nem üres-e és ha nem, belép egy, a bemeneti szó vagy mondat hosszáig tartó for ciklusba és elvégzi a konkrét validáló vizsgálatot. Fontos észrevennünk a break utasítást, amely már az 1. előfordulásnál megszakítja a for ciklust, hiszen nincs értelme továbbfutnia: megvan a keresett karakter.
public static boolean containsCharacter(String line,
char character){
boolean containing = false;
if(line != null){
for(int i = 0; i < line.length();
i++){
if(line.charAt(i)
== character){
containing =
true;
break;
}
}
}
return containing;
}
A kiértékelés már a main() főprogramban történik egy egyszerű feltételes elágazásban (Dönteni kell! (if - else) című fejezet).
Nézzük meg a futtatható Java-kódot!
import java.util.Scanner;
public class Main {
public static boolean containsCharacter(String line, char character){
boolean containing = false;
if(line != null){
for(int i = 0; i < line.length();
i++){
if(line.charAt(i)
== character){
containing =
true;
break;
}
}
}
return containing;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Kérem, hogy adja meg a szót vagy mondatot!");
String inputString = scanner.nextLine();
System.out.println("Kérem, hogy adja meg a keresett karaktert!");
String inputString2 = scanner.nextLine();
char character = inputString2.charAt(0);
System.out.println();
if(containsCharacter(inputString, character)) {
System.out.println("A szó/mondat tartalmazza a keresett
karaktert!");
}
else
System.out.println("A szó/mondat NEM
tartalmazza a keresett karaktert!");
}
}
Végeredmény:
Kérem, hogy adja meg a szót vagy mondatot!
to be or not be
Kérem, hogy adja meg a keresett karaktert!
b
A szó/mondat tartalmazza a keresett karaktert!
Természetesen a Java nyelv már annyira fejlett, hogy a fenti problémát előre megírt és beépített metódusok segítségével is meg tudjuk oldani, ráadásul ehhez különutas megoldáshoz sem kell folyamodnunk:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Kérem, hogy adja meg a szót vagy
mondatot!");
String inputString = scanner.nextLine();
System.out.println("Kérem, hogy adja meg a keresett
karaktert!");
String inputString2 = scanner.nextLine();
CharSequence character = inputString2.subSequence(0, 1);
System.out.println();
if(inputString.contains(character)) {
System.out.println("A szó/mondat
tartalmazza a keresett karaktert!");
}
else
System.out.println("A szó/mondat NEM
tartalmazza a keresett karaktert!");
}
}
Végeredmény:
Kérem, hogy adja meg a szót vagy mondatot!
to be or not be
Kérem, hogy adja meg a keresett karaktert!
b
A szó/mondat tartalmazza a keresett karaktert!