Gyakorlati alapok

Virtuális ötös lottó külön függvényeskedéssel

 

A fejezet gondolati és programozás-technikai előzményei a Virtuális ötös lottó című fejezetben olvashatók.

 

Ebben a fejezetben végre funkcionálisan szétbonthatjuk az ott publikált, nagyjából szekvenciális kódot, ezáltal "optimalizáljuk" a kódszerkezetet. Emiatt már lendületből spóroltunk 1 db buborékrendezést, hiszen az előző kódban kényszerűségből 2 db volt.

 

Legelőször szeretném hangsúlyozni, hogy ilyen, már viszonylag komplex feladatot rengetegféleképpen lehetséges megoldani. Az én megoldásom csupán egy közülük és még azt sem mondhatom, hogy optimális, bár a moduláris és objektumorientált programozás alapjainak azért megfelelő. Mindenesetre órákat el lehet vitatkozni afelett, hogy mit is nevezünk és milyen szempontok alapján implementálunk egy "optimális ötös lottó generátort"...

 

Szedjük tehát szét a már publikált kódot funkciók szerint, hiszen ennek kigyakoroltatása a jelen fejezetcsomag fő feladata!

 

Én az alábbi funkcionális metódusokat alkottam meg:

A main() főprogramban 4 különböző, 5 elemű tömböt deklaráltam:

 

int[] tombTipp = new int[5];
int[] tombTippRendezett = new int[5];
int[] tombVeletlenSzam = new int[5];
int[] tombVeletlenRendezett = new int[5];

 

Ez a tömbmennyiség nem biztos, hogy szükséges. Például a kiértékelés lefuttatásához (static void kiertekeles(int[] tombTipp, int[] tombVeletlenSzam)) nem kellenek rendezett tömbök, ám így némileg átláthatóbbá vált a kódműködés.

 

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

 

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

 

 

 

 

 

 

 

 

import java.util.*;

public class Main {
static void lottoSzamGenerator(){
    int[] tombTarolo = new int[91];
    System.out.println("A lehetséges lottószámok:");
    for(int i = 1; i < tombTarolo.length; i++) {
        tombTarolo[i] = i;
        System.out.print(tombTarolo[i] + " ");
    }
}

static int[]veletlenSzamGenerator(){
    Random rnd = new Random();
    int[] tombVeletlenSzam = new int[5];
    int szamlalo = 0;
    while(szamlalo < 5) {
        int szam = rnd.nextInt(90) + 1;
        boolean benneVan = false;
        for(int j = 0; j < szamlalo; j++) {
            if(tombVeletlenSzam[j] == szam) {
                benneVan = true;
            }
        }
    if(benneVan == false) {
        tombVeletlenSzam[szamlalo] = szam;
        szamlalo++;
    }
}
    return tombVeletlenSzam;
}

static int[]buborekRendezes(int[] tomb){
    boolean rendezett = false;
    while (!rendezett){
        rendezett = true;
        for (int j = 1; j < tomb.length; j++){
            if (tomb[j-1] > tomb[j]){
                int seged = tomb[j-1];
                tomb[j-1] = tomb[j];
                tomb[j] = seged;
                rendezett = false;
            }
        }
    }
    return tomb;
}

static int[] szamBekeresEllenorzes(){
    System.out.println("\nKérem, hogy adja meg tippjeit (5 db szám 1 és 90 között)!");
    int[] tombTipp = new int[5];
    tombTipp[0] = -1;
    tombTipp[1] = -2;
    tombTipp[2] = -3;
    tombTipp[3] = -4;
    tombTipp[4] = -5;

    int tombTippIndexSzamlalo = 0;
    boolean rosszAdat = false;
    String stringTipp = new String();

    for(int i = 1; i <= 5; i++){
        System.out.println("Kérem, hogy írja be az " + i + ". tippet!");
        do{
            int seged = 0;
            rosszAdat = false;
            do{
                rosszAdat = false;
                Scanner in = new Scanner (System.in);
                stringTipp = in.nextLine();
                char karakter = stringTipp.charAt(0);
                for(int j = 0; j < stringTipp.length(); j++){
                    karakter = stringTipp.charAt(j);
                    if(karakter != '0'
                        && karakter != '1'
                        && karakter != '2'
                        && karakter != '3'
                        && karakter != '4'
                        && karakter != '5'
                        && karakter != '6'
                        && karakter != '7'
                        && karakter != '8'
                        && karakter != '9'){
                        rosszAdat = true;
                        break;
                        }
                    }
            if(rosszAdat == true){
            System.out.println("Rossz bemeneti karakter(ek)!

                                        Kérem, hogy csak 1 és 90 közötti egész számokat adjon meg!");
            }
    }while(rosszAdat == true);

    seged = Integer.parseInt(stringTipp);
    if(seged < 1 || seged > 90){
        rosszAdat = true;
    }
    if(rosszAdat == true){
        System.out.println("Kérem, hogy csak 1 és 90 közötti egész számokat adjon meg!");
}

    tombTipp[tombTippIndexSzamlalo] = seged;
    label:
    for(int k = 0; k <= tombTippIndexSzamlalo; k++){
        for(int l = 1; l <= tombTippIndexSzamlalo; l++){
            if(k != l && tombTipp[k] == tombTipp[l]){
                rosszAdat = true;
                System.out.println("Számegyezés! Kérem, hogy emlékezzen arra, amit már begépelt!");
                break label;
            }
        }
    }

    }while(rosszAdat == true);

    tombTipp[tombTippIndexSzamlalo] = Integer.parseInt(stringTipp);
    tombTippIndexSzamlalo++;
    }
    return tombTipp;
}

static void kiertekeles(int[] tombTipp, int[] tombVeletlenSzam){
    int talalat = 0;
    for(int i = 0; i < tombTipp.length; i++){
        for(int j = 0; j < tombVeletlenSzam.length; j++){
            if(tombTipp[i] == tombVeletlenSzam[j]){
                talalat++;
        }
    }
}
    System.out.println("Önnek " + talalat + " találata van.");
}

static void tombKiiras(int[] tomb){
    for(int i = 0; i < tomb.length; i++){
        System.out.print(tomb[i] + " ");
    }
}

public static void main(String[] args) {
    int[] tombTipp = new int[5];
    int[] tombTippRendezett = new int[5];
    int[] tombVeletlenSzam = new int[5];
    int[] tombVeletlenRendezett = new int[5];

    lottoSzamGenerator();
    System.out.println();

    tombVeletlenSzam = veletlenSzamGenerator();
    tombVeletlenRendezett = buborekRendezes(tombVeletlenSzam);

    tombTipp = szamBekeresEllenorzes();
    tombTippRendezett = buborekRendezes(tombTipp);
    System.out.println();

    System.out.println("Az Ön által tippelt számok növekvő sorrendben:");
    tombKiiras(tombTippRendezett);
    System.out.println("\n");

    System.out.println("A lottóhúzás számai növekvő sorrendben:");
    tombKiiras(tombVeletlenRendezett);
    System.out.println("\n");

    kiertekeles(tombTippRendezett, tombVeletlenRendezett);
    }
}

 

Végeredmény (például):

A lehetséges lottószámok:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
 

Kérem, hogy adja meg tippjeit (5 db szám 1 és 90 között)!
Kérem, hogy írja be az 1. tippet!
w
Rossz bemeneti karakter(ek)! Kérem, hogy csak 1 és 90 közötti egész számokat adjon meg!
2
Kérem, hogy írja be az 2. tippet!
222
Kérem, hogy csak 1 és 90 közötti egész számokat adjon meg!
28
Kérem, hogy írja be az 3. tippet!
560
Kérem, hogy csak 1 és 90 közötti egész számokat adjon meg!
r
Rossz bemeneti karakter(ek)! Kérem, hogy csak 1 és 90 közötti egész számokat adjon meg!
48
Kérem, hogy írja be az 4. tippet!
4
Kérem, hogy írja be az 5. tippet!
0
Kérem, hogy csak 1 és 90 közötti egész számokat adjon meg!
33

Az Ön által tippelt számok növekvő sorrendben:
2 4 28 33 48

A lottóhúzás számai növekvő sorrendben:
19 28 42 71 89

Önnek 1 találata van.