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!

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

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.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

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:

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!

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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!