Gyakorlati alapok
Kis hazugságvizsgálat: szóösszehasonlítás
Természetesen a fejezetben szereplő Java-kódnak semmi köze a hazugságvizsgálatokhoz, egyszerű, elegáns csúsztatásról beszélhetünk csak, amennyiben szavak (és betűk) összehasonlítását "hazugságvizsgálatnak" minősítjük. Sőt, még ennél is kevesebbről van szó. Egész szavakat roppant könnyen össze tudunk hasonlítani az equals() függvénnyel (String című fejezet), ezért itt és most kissé nehezebb feladat formájában arra vállalkozunk, hogy megállapítsuk: az 1. begépelt szó tartalmazza-e a 2. begépelt szót vagy bármelyik betűjét.
A legelső ellenőrzés voltaképpen a gonoszkodó felhasználó hárítása: minket tesztelgetve nagy valószínűséggel 2 teljesen azonos szót fog begépelni. Ezt a már említett equals() függvénnyel védjük ki:
if(szo1.equals(szo2)){
System.out.println("A 2 szó egyezik.");
}
A második és az egyik legfontosabb feltétel, hogy az 1. szó legyen hosszabb a 2. szónál. Ezt az ellenőrzött adatbekérést egy hátultesztelő ciklus végzi el nekünk:
do{
System.out.println("Kérem, hogy adja meg a 2. szót (legyen
rövidebb az 1.-nél)!");
szo2 = in.nextLine();
}while (szo1.length()< szo2.length());
A program további ellenőrző része a folyamatosan léptetett substring() metódusra épül. A léptetés az n és k számlálók segítségével történik. Bármilyen egyezés esetén (ez lehet a legkisebb betűegyezés is) a boolean típusú egyezes flag true értékre lesz állítva, az eredménykiírás ennek értékéből kerül meghatározásra.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = 0;
boolean egyezes = false;
System.out.println("Kérem, hogy adja meg az 1. szót!");
String szo1 = in.nextLine();
String szo2 = null;
do{
System.out.println("Kérem, hogy adja
meg a 2. szót (legyen rövidebb az 1.-nél)!");
szo2 = in.nextLine();
}while (szo1.length()<
szo2.length());
if(szo1.equals(szo2)){
System.out.println("A 2 szó
egyezik.");
}
else{
int k = szo2.length();
do{
String tarolo = szo1.substring(n, k);
if(tarolo.equals(szo2)){
egyezes =
true;
}
else {
n++;
}
k++;
}while (k != szo1.length() + 1);
if(egyezes == true){
System.out.println("Az 1. szó
tartalmazza a 2. szót.");
}
else
System.out.println("Az 1. szó NEM
tartalmazza a 2. szót.");
}
}
}
Végeredmény:
Kérem, hogy adja meg az 1. szót!
java
Kérem, hogy adja meg a 2. szót (legyen rövidebb az 1.-nél)!
cpp
Az 1. szó NEM tartalmazza a 2. szót.