Wlasny generator

0

Witam potrzebuje pilnie waszej pomocy. Napisalem dwa programy, w ktorych sa "losowane" liczby.

program1

public class klasa {

       long   xi = 8;

     void  xi(){
           for(int i =0; i<8; i++){
       long a = 65; 
       long m = 21; 

       xi = ( a * xi ) % m;
    get(xi);
           }}

    void get(long a){System.out.println(a);}
    }

a to drugi

public class p1 {

     long xi = 7;
    void f(){
    for(int i=0 ;i<100;i++){
          long a = 7; // 2**31-1
          long m = 23; // 2**31-1
         long b = -1;
           xi = ( a * xi + b ) % m;
    if(xi<a && xi>b){      
    gh(xi);
    }
    }
    }
    void gh (long gx){System.out.println(gx);}

I teraz mam taki problem. Przy kazdem uruchomieniu wyskakuja te same liczby.Jak moge osiagnac
efekt aby przy kazdym uruchomieniu programu pokazywaly sie w wyznaczonym przedziale liczby ale w roznej kolejnosci?

Bardzo prosilbym was o pomoc .

0

Nie wiem, moze ja jestem slepy ale gdzie tu jest element losowosci? Chcesz liczbe losowa z zakresu np 0 - 50, to zrob (int)(50*Math.random()) i tyle

0
iluminacja napisał(a)

Nie wiem, moze ja jestem slepy ale gdzie tu jest element losowosci? Chcesz liczbe losowa z zakresu np 0 - 50, to zrob (int)(50*Math.random()) i tyle

Tak zgadza sie , lecz nie wiesz jak zostala zbudowana ta metoda. W powyzszych programach uzylem metod , ktore sa powszechnie stosowane do generowania liczb losowych.

Za pomoca tych programow jestem w stanie wygenerowac pewna ilosc liczb. Chodzi mi o to jak moglbym zrobic aby przy przy kazdym uruchomieniu tej metody byly generowane te liczby w innej kolejnosci.
Czytalem gdzies ,ze to wiaze sie z czasem unix , albo cos takie.

0
cccx napisał(a)
iluminacja napisał(a)

Nie wiem, moze ja jestem slepy ale gdzie tu jest element losowosci? Chcesz liczbe losowa z zakresu np 0 - 50, to zrob (int)(50*Math.random()) i tyle

Tak zgadza sie , lecz nie wiesz jak zostala zbudowana ta metoda. W powyzszych programach uzylem metod , ktore sa powszechnie stosowane do generowania liczb losowych.

Za pomoca tych programow jestem w stanie wygenerowac pewna ilosc liczb. Chodzi mi o to jak moglbym zrobic aby przy przy kazdym uruchomieniu tej metody byly generowane te liczby w innej kolejnosci.
Czytalem gdzies ,ze to wiaze sie z czasem unix , albo cos takie.
Ok, przyjales ze nie wiem jak zostala zbudowana ta metoda^^ Wiec moja wersja jest taka, chcesz stworzyc generatory pseudolosowe o okresie M: Pierwszy program, to generator liniowy, drugi to afiniczny. Chcesz miec rozne parametry, to musisz zmieniac ziarno, czyli Xo, wlasciwie to i a powinienes zmieniac, ktore musisz losowac z przedzialu <1;-M-1> w pierwszym przypadku. W drugim analogicznie. Dlugosc okresu zalezy od a i od M. I w zadnym przypadku, nie wiem dlaczego nie chcesz uzywac Math.random() do generowania chociazby ziarna.

0

Bo nie :D

0

Zacznij od liczby zależnej od czasu systemowego:

long xi = System.currentTimeMillis();

0

Ok , to moglby ktos wrzucic generator liniowy i afiniczny z metoda Math.Random();

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0