Gyakorlati alapok III.

Palindróma osztályszinten

 

Nem túl izgalmas, de azért tanulságos története van ezen fejezetnek. A palindróma megoldását adtam fel egyik tanítványomnak, de már osztályszintű megvalósításban (alapfejezete a Palindróma). A megoldás kiválóra sikerült, ám időközben már én is annyit foglalkoztam a problémával, hogy "kénytelen" voltam megalkotni saját verziómat. Ez 5 osztályból áll:

Controller

Ez az osztály tartalmazza a main() főprogramot és egyfajta lefuttató-kontrolláló funkciót lát el (A Controller osztály lehetősége című fejezet). A cél itt, hogy lehetőség szerint az összes (külső) osztályhivatkozás 1 helyen legyen.

 

Input

Ezen osztálynak csupán 1 funkciója van: bekérje a palindróma megállapításához szükséges szöveget. Kimeneti típusa string.

 

Messages

Ezen osztály csakis a működés közben keletkező üzeneteket tartalmazza. Típusuk szerint egyszerű szöveges eljárások (Külön (nem rendőrségi) eljárás című fejezet).

 

Test

Ezen osztálynak egyetlen funkciója van: tesztelni, hogy a bemeneti string palindróma-e vagy sem, ezért kimeneti típusa kétállású boolean.

 

Validation

Ezen osztály ellenőrzi (validálja), hogy a bemeneti string megfelelő-e a palindróma vizsgálatához. Itt többféle szempont is felállítható, egyúttal remek einsteini gondolatkísérlet annak meghatározására, hogy milyen hibákat véthet a bemeneti string-et begépelő buta (vagy gonoszkodó) felhasználó. Én az alábbi szempontokat választottam. Hibaüzenet, ha:

Mivel a projekt oktatási célból készült, a legfontosabb kommenteket is bennehagytam (Kommentelés című fejezet), például:

 

//Checking
//System.out.println(validation.isValidAll(validation.isValidNotEmpty(inputString),

 

Nézzük meg a futtatható Java-kódot:

 

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

 

 

 

 

 

 

 

 

Controller.java

 

public class Controller {

public static void main(String[]args) {
    Messages messages = new Messages();
    Input input = new Input();
    String inputString = "";
    Validation validation = new Validation();
    do {
        messages.messageGreetings();
        inputString = input.inputString();
        if(validation.isValidNotEmpty(inputString) == false) {
            messages.messageIsEmpty();
            //System.out.println(validation.isValidNotEmpty(inputString));
            continue;
        }
        if(validation.isValidChars(inputString) == false) {
            messages.messageNOTProperChar();
            //System.out.println(validation.isValidChars(inputString));
            continue;
        }
    }while(validation.isValidAll(validation.isValidNotEmpty(inputString), validation.isValidChars(inputString)) == false);

    //Checking
    //System.out.println(validation.isValidAll(validation.isValidNotEmpty(inputString), validation.isValidChars(inputString)));

    Test test = new Test();
    if(test.testPalindrome(inputString) == true) {
        messages.messageIsPalindrome();
    }
    else
        messages.messageIsNOTPalindrome();
    }
}

 

Input.java

 

import java.util.Scanner;

public class Input {

public static String inputString() {
    String input = "";
    Scanner scanner = new Scanner(System.in);
    input = scanner.nextLine();
    //Alapertelmezesben le kell zarni, de nem most
    //scanner.close();
    return input;
    }
}

 

Messages.java


class Messages {
void messageGreetings() {
    System.out.println ("Kerem, hogy adja meg a vizsgalando szoveget!");
}

void messageNOTProperChar() {
    System.out.println ("Nem megfelelo karakter(ek)!");
}

void messageIsEmpty() {
    System.out.println ("Kerem, hogy irjon be valamit!");
}

void messageIsPalindrome() {
    System.out.println ("A bevitt szoveg palindroma!");
}

void messageIsNOTPalindrome() {
    System.out.println ("A bevitt szoveg NEM palindroma!");
    }
}

 

Test.java

 

public class Test {

public boolean testPalindrome(String input) {
    String inputTemp = input.toLowerCase().replaceAll("\\s", "");
    boolean isPalindrome = false;
    StringBuffer reversedString = new StringBuffer(inputTemp).reverse();

    //Checking
    //System.out.println(inputTemp);
    //System.out.println(reversedString);

    if(inputTemp.equals(reversedString.toString())) {
        isPalindrome = true;
        return isPalindrome;
    }
    return isPalindrome;
    }
}

 

Validation.java

public class Validation {

boolean isValidNotEmpty(String input) {
    boolean valid = false;
    if(input.isEmpty()) {
        return valid;
    }
    valid = true;
        return valid;
    }

boolean isValidChars(String input) {
    boolean valid = false;
    char [] arrayChars = new char[]
    {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','X','Y','V','W','Z',
    'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','x','y','v','w','z',' '};

    char[] inputArray = input.toCharArray();

    //ellenorzo tomb
    boolean [] check = new boolean[input.length()];

    //A biztonsag kedveert
    for(int i = 0; i < check.length; i++) {
        check[i] = false;
    }

    //Minden elemet minden elemmel
    for(int i = 0; i < inputArray.length; i++) {
        for(int j = 0; j < arrayChars.length; j++) {
            if(inputArray[i] == arrayChars[j]) {
                check[i] = true;
                    continue;
                    }
                }
            }

    //Ha 1 db false is van, tovabb mar nem erdemes vizsgalni -> return
    for(int i = 0; i < check.length; i++) {
        if(check[i] == false) {
            return valid;
            }
        }
        valid = true;
            return valid;
    }

boolean isValidAll(boolean notEmpty, boolean charsOK) {
    boolean valid = false;
    if(notEmpty && charsOK == true) {
        valid = true;
            return valid;
        }
    return valid;
    }
}
 

Végeredmény:

Kerem, hogy adja meg a vizsgalando szoveget!

Kerem, hogy irjon be valamit!
Kerem, hogy adja meg a vizsgalando szoveget!
123
Nem megfelelo karakter(ek)!
Kerem, hogy adja meg a vizsgalando szoveget!
geza kek az eg
A bevitt szoveg palindroma!