Házi feladat
Alapfejezet - Virtuális ötös lottó külön függvényeskedéssel III.
Házi feladat - Nézzük meg, hogy a Java rendszerprogramozói jó munkát végeztek-e a kvázi véletlenszámok generálásában! Hogyan tudnánk ezt leellenőrizni?
Elsősorban beleturkálhatunk a Random() függvény hivatalos dokumentációba, amelyből kiderül, hogy milyen matematikát implementáltak. Természetesen Java bácsiék értik a dolgukat, ezért ebben nem tudjuk őket megfogni.
Másodsorban manuálisan a következőt tehetjük:
-
kivesszük a kódból mindazt, amely saját tippjeinket menedzseli, hiszen most csak a véletlenszámok előfordulására vagyunk kíváncsiak, még pedig int sorsolasiKor hosszban,
-
Mivel az elofordulas tömb tárolja az összes lottószám találatainak számát sorsolasiKor hosszban, minimum-, és maximumkiválasztással meghatározhatjuk, hogy van-e nagy "találati kilengés". Ha igen, az nem jó jel, mert abban az esetben a Random() függvény rosszul modellezi a véletlen előfordulásokat. Ugyanakkor megnézhetjük a találati kilengés tartományát, valamint átlagos középértékét.
A fenti okfejtés természetesen saját találmány; egy matematikus minden bizonnyal azonnal rábólintana, becsatlakoztatva a megfelelő matematikai apparátust. Bevallom őszintén, én ezt már nem tettem meg, éppen ezért az eredményekből mélyebb következtetéseket nem vonnék le. Ezen fejezetet csak gondolatébresztőnek szántam és várom az esetleges további ötleteket!
Nézzük meg a futtatható Java-kódot:
import java.util.Random;
public class Main {
public static boolean benneVan(int szam, int[] tomb) {
boolean talalat = false;
for(int i = 0; i < tomb.length; i++) {
if(szam == tomb[i]) {
talalat =
true;
break;
}
}
return talalat;
}
public static int[] tombFeltoltes(int elemszam, int hatar) {
int[] tomb = new int[elemszam];
Random rnd = new Random();
int szam;
for(int i = 0; i < tomb.length; i++) {
do{
szam =
rnd.nextInt(hatar) + 1;
}while (benneVan(szam, tomb));
tomb[i] = szam;
}
return tomb;
}
public static void kiir(int[] tomb){
System.out.println();
for (int i = 0; i < tomb.length; i++) {
System.out.print(tomb[i]+" ");
}
}
public static int minimumKereses(int[] tomb) {
int minimum = 1000;
for(int i = 0; i < tomb.length; i++) {
if(tomb[i] == 0){
continue;
}
if(tomb[i] < minimum){
minimum =
tomb[i];
}
}
return minimum;
}
public static int maximumKereses(int[] tomb) {
int maximum = 0;
for(int i = 0; i < tomb.length; i++) {
if(tomb[i] > maximum){
maximum =
tomb[i];
}
}
return maximum;
}
public static void main(String[] args) {
int[] szamok = new int[5];
int[] talalatok = new int[6];
int[] aktualisTalalat = new int[6];
int[] elofordulas = new int[91];
int sorsolasiKor = 1000;
for(int i = 0; i < sorsolasiKor; i++) {
szamok = tombFeltoltes(5, 90);
for(int j = 0; j < szamok.length;
j++) {
elofordulas[szamok[j]]++;
}
talalatok[aktualisTalalat[0]]++;
}
for(int i = 1; i < elofordulas.length; i++){
System.out.println("A(z) " + i + "
előfordulása "
+ sorsolasiKor + " sorsolási kör
alatt: " + elofordulas[i]);
}
System.out.println("\nMinimális előfordulás: " +
minimumKereses(elofordulas)
+ "\nMaximális előfordulás: " +
maximumKereses(elofordulas));
int tartomany = maximumKereses(elofordulas) - minimumKereses(elofordulas);
System.out.println("Tartománya: " + tartomany);
double kozepertek = maximumKereses(elofordulas) - (tartomany
/ 2);
System.out.println("Középérték: " + kozepertek);
}
}
Végeredmény:
A(z) 1 előfordulása 1000 sorsolási kör alatt: 56
A(z) 2 előfordulása 1000 sorsolási kör alatt: 49
A(z) 3 előfordulása 1000 sorsolási kör alatt: 52
A(z) 4 előfordulása 1000 sorsolási kör alatt: 66
A(z) 5 előfordulása 1000 sorsolási kör alatt: 40
A(z) 6 előfordulása 1000 sorsolási kör alatt: 61
A(z) 7 előfordulása 1000 sorsolási kör alatt: 55
A(z) 8 előfordulása 1000 sorsolási kör alatt: 57
A(z) 9 előfordulása 1000 sorsolási kör alatt: 49
A(z) 10 előfordulása 1000 sorsolási kör alatt: 50
A(z) 11 előfordulása 1000 sorsolási kör alatt: 59
A(z) 12 előfordulása 1000 sorsolási kör alatt: 53
A(z) 13 előfordulása 1000 sorsolási kör alatt: 59
A(z) 14 előfordulása 1000 sorsolási kör alatt: 65
A(z) 15 előfordulása 1000 sorsolási kör alatt: 47
A(z) 16 előfordulása 1000 sorsolási kör alatt: 41
A(z) 17 előfordulása 1000 sorsolási kör alatt: 54
A(z) 18 előfordulása 1000 sorsolási kör alatt: 58
A(z) 19 előfordulása 1000 sorsolási kör alatt: 45
A(z) 20 előfordulása 1000 sorsolási kör alatt: 53
A(z) 21 előfordulása 1000 sorsolási kör alatt: 57
A(z) 22 előfordulása 1000 sorsolási kör alatt: 56
A(z) 23 előfordulása 1000 sorsolási kör alatt: 54
A(z) 24 előfordulása 1000 sorsolási kör alatt: 64
A(z) 25 előfordulása 1000 sorsolási kör alatt: 71
A(z) 26 előfordulása 1000 sorsolási kör alatt: 50
A(z) 27 előfordulása 1000 sorsolási kör alatt: 48
A(z) 28 előfordulása 1000 sorsolási kör alatt: 61
A(z) 29 előfordulása 1000 sorsolási kör alatt: 60
A(z) 30 előfordulása 1000 sorsolási kör alatt: 47
A(z) 31 előfordulása 1000 sorsolási kör alatt: 60
A(z) 32 előfordulása 1000 sorsolási kör alatt: 49
A(z) 33 előfordulása 1000 sorsolási kör alatt: 51
A(z) 34 előfordulása 1000 sorsolási kör alatt: 65
A(z) 35 előfordulása 1000 sorsolási kör alatt: 61
A(z) 36 előfordulása 1000 sorsolási kör alatt: 53
A(z) 37 előfordulása 1000 sorsolási kör alatt: 49
A(z) 38 előfordulása 1000 sorsolási kör alatt: 47
A(z) 39 előfordulása 1000 sorsolási kör alatt: 52
A(z) 40 előfordulása 1000 sorsolási kör alatt: 48
A(z) 41 előfordulása 1000 sorsolási kör alatt: 52
A(z) 42 előfordulása 1000 sorsolási kör alatt: 58
A(z) 43 előfordulása 1000 sorsolási kör alatt: 57
A(z) 44 előfordulása 1000 sorsolási kör alatt: 53
A(z) 45 előfordulása 1000 sorsolási kör alatt: 55
A(z) 46 előfordulása 1000 sorsolási kör alatt: 54
A(z) 47 előfordulása 1000 sorsolási kör alatt: 60
A(z) 48 előfordulása 1000 sorsolási kör alatt: 56
A(z) 49 előfordulása 1000 sorsolási kör alatt: 53
A(z) 50 előfordulása 1000 sorsolási kör alatt: 51
A(z) 51 előfordulása 1000 sorsolási kör alatt: 51
A(z) 52 előfordulása 1000 sorsolási kör alatt: 50
A(z) 53 előfordulása 1000 sorsolási kör alatt: 57
A(z) 54 előfordulása 1000 sorsolási kör alatt: 43
A(z) 55 előfordulása 1000 sorsolási kör alatt: 47
A(z) 56 előfordulása 1000 sorsolási kör alatt: 46
A(z) 57 előfordulása 1000 sorsolási kör alatt: 52
A(z) 58 előfordulása 1000 sorsolási kör alatt: 59
A(z) 59 előfordulása 1000 sorsolási kör alatt: 61
A(z) 60 előfordulása 1000 sorsolási kör alatt: 74
A(z) 61 előfordulása 1000 sorsolási kör alatt: 60
A(z) 62 előfordulása 1000 sorsolási kör alatt: 53
A(z) 63 előfordulása 1000 sorsolási kör alatt: 65
A(z) 64 előfordulása 1000 sorsolási kör alatt: 51
A(z) 65 előfordulása 1000 sorsolási kör alatt: 59
A(z) 66 előfordulása 1000 sorsolási kör alatt: 56
A(z) 67 előfordulása 1000 sorsolási kör alatt: 55
A(z) 68 előfordulása 1000 sorsolási kör alatt: 62
A(z) 69 előfordulása 1000 sorsolási kör alatt: 53
A(z) 70 előfordulása 1000 sorsolási kör alatt: 52
A(z) 71 előfordulása 1000 sorsolási kör alatt: 59
A(z) 72 előfordulása 1000 sorsolási kör alatt: 60
A(z) 73 előfordulása 1000 sorsolási kör alatt: 53
A(z) 74 előfordulása 1000 sorsolási kör alatt: 64
A(z) 75 előfordulása 1000 sorsolási kör alatt: 63
A(z) 76 előfordulása 1000 sorsolási kör alatt: 57
A(z) 77 előfordulása 1000 sorsolási kör alatt: 53
A(z) 78 előfordulása 1000 sorsolási kör alatt: 62
A(z) 79 előfordulása 1000 sorsolási kör alatt: 51
A(z) 80 előfordulása 1000 sorsolási kör alatt: 55
A(z) 81 előfordulása 1000 sorsolási kör alatt: 60
A(z) 82 előfordulása 1000 sorsolási kör alatt: 58
A(z) 83 előfordulása 1000 sorsolási kör alatt: 56
A(z) 84 előfordulása 1000 sorsolási kör alatt: 63
A(z) 85 előfordulása 1000 sorsolási kör alatt: 59
A(z) 86 előfordulása 1000 sorsolási kör alatt: 55
A(z) 87 előfordulása 1000 sorsolási kör alatt: 67
A(z) 88 előfordulása 1000 sorsolási kör alatt: 66
A(z) 89 előfordulása 1000 sorsolási kör alatt: 62
A(z) 90 előfordulása 1000 sorsolási kör alatt: 50
Minimális előfordulás: 40
Maximális előfordulás: 74
Tartománya: 34
Középérték: 57.0