Gyakorlati alapok

Különutas véletlenszám-generálás

 

A Véletlenül generáljunk már véletlenszámokat! című fejezetben sokféle "véletlenszerű" Java-kód fordul elő. Ezekből egyet kiválasztva most azt nézzük meg, hogy miképpen lehet a benne foglaltakat külön metódusban is megvalósítani. Legyen a feladat 10 db 1 és 100 közé eső int típusú véletlenszám külön függvényes generálása! A kód tároló-kiindulópontja egy 10 elemű int[]tombFeltoltott nevű tömb, ezt lesz feltöltve véletlenszámokkal:

 

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

 

 

 

 

 

 

 

 

import java.util.Random;

public class Main {
    static int[]veletlenSzamgenerator(){
    int[]tombFeltoltott = new int[10];
    Random random = new Random();
    for(int i = 0; i < tombFeltoltott.length; i++){
        tombFeltoltott[i] = random.nextInt(100) + 1;
    }
    return tombFeltoltott;
}


    public static void main(String[] args) {
    int tombAtvevo[] = new int [10];

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

 

Végeredmény:

0 0 0 0 0 0 0 0 0 0

 

A végeredmény mégis 0 értékek tömege, aminek oka, hogy nem teremtettünk kapcsolatot a külső metódus és a main() tömbje közt, más szóval nem vettük át a külső metódus által generált értékeket. Ehhez csak 1 sort kell beillesztenünk a megfelelő helyre:

 

tombAtvevo = veletlenSzamgenerator();

 

Ám vegyük észre, hogy előzőleg alaposan beállítottuk a kimeneti és bemeneti adattípus-egyezéseket: lényegében mindkettőnek azonos típusúnak kell lennie (int[10]), másként sokféle hibaüzenettel szembesülhetünk.

 

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

 

 

 

 

 

 

 

 

import java.util.Random;

public class Main {
    static int[]veletlenSzamgenerator(){
    int[]tombFeltoltott = new int[10];
    Random random = new Random();
    for(int i = 0; i < tombFeltoltott.length; i++){
        tombFeltoltott[i] = random.nextInt(100) + 1;
    }
    return tombFeltoltott;
}


    public static void main(String[] args) {
    int tombAtvevo[] = new int [10];

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

 

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

27 81 56 23 44 56 96 65 56 24

 

A kódfutás azért működött azonnal, mert a külső metódus static módosítószóval volt illetett; erről részletesen írtam az Alapszinten a static módosítóról című fejezetben. Ha azonban önhatalmúlag, diktatorikus módon megfosztjuk tőle, hibaüzenetet kapunk: a fordító JVM lényegében nem ismeri fel a veletlenSzamgenerator() függvényre történő hivatkozást. E mögött egy egyszerű hozzáférési szabály húzódik meg:

 

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

 

Statikus változók és metódusok nem férhetnek hozzá NEM statikus változókhoz, metódusokhoz. Viszont NEM statikus változók és metódusok hozzáférhetnek  statikus változókhoz, metódusokhoz, hiszen éppen ez a statikusság fő előnye.

 

A megoldás már említett módon a példányosítás:

 

Main main = new Main();
 

Ezután már hozzáférhetünk a Main osztály összes (egyéb módon nem korlátozott) metódusához, ezt az példányosított név + pont (.) hivatkozással tehetjük meg (itt main.):

 

tombAtvevo = main.veletlenSzamgenerator();

 

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

 

 

 

 

 

 

 

 

import java.util.Random;

public class Main {
    static int[]veletlenSzamgenerator(){
    int[]tombFeltoltott = new int[10];
    Random random = new Random();
    for(int i = 0; i < tombFeltoltott.length; i++){
        tombFeltoltott[i] = random.nextInt(100) + 1;
    }
    return tombFeltoltott;
}


    public static void main(String[] args) {
    int tombAtvevo[] = new int[10];
    Main main = new Main();
    tombAtvevo = main.veletlenSzamgenerator();
    for(int i = 0; i < tombAtvevo.length; i++){
        System.out.print(tombAtvevo[i] + " ");
        }
    }
}

 

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

76 46 4 43 10 18 46 3 79 66