Gyakorlati alapok

2 tömb uniója külön függvényekkel

www.informatika-programozas.hu - Ez a programozási feladat nehéz lesz!

 

Amennyiben a Tisztelt Olvasó tanulmányai során fentről lefelé halad a Honlaptérképben, ez a fejezet garantáltan még meg fogja haladni aktuális tudásszintjét, hiszen különutas függvénymegoldásokat tartalmaz (Gyakorlati alapok II. (main() + külön eljárás / függvény) című fejezetcsomagtól kezdve felfelé). A fejezetet azért illesztettem mégis ide, hogy a tömbműveletek 1 helyen, logikus egységben legyenek.

 

Kiindulási pontunk a 2 tömb uniója című fejezetben ismertetett kód, ezt fogjuk igényeinkhez mérten Javacsik Béla úri szabóval átszabatni:

 

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

 

 

 

 

 

 

 


public class Main {
    public static void main(String[] args) {
    int[] tomb1 = new int[] {1, 3, 5, 7, 9, 11};
    int[] tomb2 = new int[] {2, 4, 6, 8, 9, 10};

    int[] tombUnio = new int[tomb1.length + tomb2.length];

    for(int i = 0; i < tomb1.length; i++) {
        tombUnio[i] = tomb1[i];
    }

    int index = tomb1.length;
    for(int i = 0; i < tomb2.length; i++) {
        boolean benneVan = false;
        for(int j = 0; j < tombUnio.length; j++) {
            if (tombUnio[j] == tomb2[i]) {
                benneVan = true;
                break;
            }
        }

    if (benneVan == false) {
        tombUnio[index] = tomb2[i];
        index++;
        }
    }

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

 

Végeredmény (például):
1 3 5 7 9 11 13 2 4 6 8 10 12 0

 

Első problémánk, ha előre meghatározott számok helyett véletlenszámokkal kívánjuk feltölteni a kezdő tömböket, ekkor ugyanis figyelnünk kell, hogy 2 azonos szám ne kerüljön a tömbbe. A fenti kódból kiderül, hogy ezt eddig nem tettük meg, bár enélkül (hangsúlyozottan véletlenszámok esetében) hibás eredményeket kapunk az uniótömbben.

 

Ugyanakkor érdemes a véletlenszám-generáló függvényt csak egyszer megírnunk, sőt:

 

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

 

objektumorientált szempontból ezt kötelezően csak egyszer tehetjük meg, bár bármennyiszer hivatkozhatunk rá, azaz bármennyiszer felhasználhatjuk!

 

Ez a kötelezvény mindenképpen csakis különutas függvénymegoldással tartható be. De ha már itt vagyunk, hát helyezzük a funkciókat szintén külön metódusokba!  Ilyetén módon a következő metódusok fognak létrejönni:

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

 

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

 

 

 

 

 

 

 


import java.util.Random;

public class Main {

public static boolean benneVan(int szam, int[] tomb) {
    boolean vanIlyenSzam = false;
    for (int i = 0; i < tomb.length; i++) {
        if (szam == tomb[i]) {
            vanIlyenSzam = true;
            break;
            }
        }
    return vanIlyenSzam;
}

public static int[] tombFeltoltes() {
    int[] tomb = new int[10];
    Random rnd = new Random();
    int szam;
    for(int i = 0; i < tomb.length; i++) {
        do {
            szam = rnd.nextInt(20) + 1;
            }while(benneVan(szam, tomb));
        tomb[i] = szam;
        }
    return tomb;
}

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

public static int[] tombUnio(int[] tomb1, int[] tomb2) {
    int[] tombUnio = new int[tomb1.length + tomb2.length];
    for(int i = 0; i < tomb1.length; i++) {
        tombUnio[i] = tomb1[i];
    }

    int index = tomb1.length;
    for(int i = 0; i < tomb2.length; i++) {
        boolean benneVan = false;
        for(int j = 0; j < tombUnio.length; j++) {
            if (tombUnio[j] == tomb2[i]) {
                benneVan = true;
                break;
                }
            }

        if (benneVan == false) {
            tombUnio[index] = tomb2[i];
            index++;
        }
    }
    return tombUnio;
}

public static void main(String[] args) {
    int[] tomb1 = new int[10];
    int[] tomb2 = new int[10];
    int[] tombUnio = new int[tomb1.length + tomb2.length];

    tomb1 = tombFeltoltes();
    tomb2 = tombFeltoltes();

    tombUnio = tombUnio(tomb1, tomb2);

    tombKiiras(tomb1);
    tombKiiras(tomb2);
    tombKiiras(tombUnio);
    }
}

 

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

9 10 4 2 17 15 5 8 18 7
4 20 15 17 13 11 8 1 3 5
9 10 4 2 17 15 5 8 18 7 20 13 11 1 3 0 0 0 0 0