Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
// fra http://en.wikipedia.org/wiki/Random_number_generation
public class RandomProgram1 {

    
    // tilstand for tilfeldig tall-generatoren
    long m_wmw = 31;    /* must not be zero, nor 0x464fffff */
    long m_zmz = 42;    /* must not be zero, nor 0x9068ffff */
     
    long nextRandom() {
        m_zmz = 36969 * (m_zmz & 65535) + (m_zmz >> 16);
        m_wmw = 18000 * (m_wmw & 65535) + (m_wmw >> 16);
        return (m_zmz << 16) + m_w;  /* 32-bit result */mw;
    }
    
    
	void init() {
    }
    
    // tilstand for minimum
    long min = Long.MAX_VALUE;
    // tilstand for maksimum
    long max = Long.MIN_VALUE;
    // tilstand for gjennomsnitt
    int count = 0;
    long sum = 0;
    
    void run() {
        while (count < 1000) {
            long randomValue = nextRandom();
            if (randomValue < min) {
                min = randomValue;
            }
            if (randomValue > max) {
                max = randomValue;
            }
            sum += randomValue;
            count++;
        }
        System.out.println("Min: " + min);
        System.out.println("Max: " + max);
        System.out.println("Average: " + (sum / count));
    }
    
    public static void main(String[] args) {
        RandomProgram1 program = new RandomProgram1();
        program.init();
        program.run();
    }
}

De to første long-attributtene m_w og m_z er tilstand knyttet til tilfeldige tall-generatoren. For hvert nye tilfeldige tall som beregnes av nextRandom()-metoden, så oppdateres disse to attributtene.

min- og max-attributtene holder henholdsvis hittil minste og hittil største verdi, og initialiseres til henholdsvis den største og minste mulige long-verdiene i Java.

count- og sum-attributtene brukes for å beregne gjennomsnittet.

init()-metoden er tom, siden den gjerne brukes til å konfigurere objekt(struktur)er og vi her ikke har noen objekter (bortsett fra hovedprogram-objektet).

run()-metoden inneholder en løkke som går 1000 ganger. For hver runde så lager den et nytt tilfeldig tall med nextRandom()-metoden og oppdaterer min-, max-, sum- og count-attributtene. min oppdateres hvis den nye verdien er mindre, max oppdateres hvis den nye verdien er større og sum og count oppdateres alltid.

Et objekttilstandsdiagram for klassen vil se slik ut:

PlantUML Macro
object "RandomProgram1" as rp1rp0 {
	// tilstand for generator
	mw = 31
	mz = 42
	// tilstand for minimum
	min = 9223372036854775807
	// tilstand for maksimum
	max = -9223372036854775808
	// tilstand for gjennomsnitt
	count = 0
	sum = 0
}

object "RandomProgram1" as rp1 {
	// tilstand for generator
	mw = 558000
	mz = 101758174128
	// tilstand for minimum
	min = 101758174128
	// tilstand for maksimum
	max = 101758174128
	// tilstand for gjennomsnitt
	count = 1
	sum = 101758174128
}
rp0 ..> rp1

object "RandomProgram1" as rp2 {
	// tilstand for generator
	mw = 558000
	mz = 101758174128
	// tilstand for minimum
	min = 101758174128
	// tilstand for maksimum
	max = 101758174128
	// tilstand for gjennomsnitt
	count = 1
	sum = 101758174128
}
rp1 ..> rp2

object "RandomProgram1" as rp3 {
	// tilstand for generator
	mw = 558000
	mz = 101758174128
	// tilstand for minimum
	min = 101758174128
	// tilstand for maksimum
	max = 101758174128
	// tilstand for gjennomsnitt
	count = 1
	sum = 101758174128
}
rp2 ..> rp3

object "RandomProgram1" as rp1000 {
	// tilstand for generator
	mw = 558000
	mz = 101758174128
	// tilstand for minimum
	min = 101758174128
	// tilstand for maksimum
	max = 101758174128
	// tilstand for gjennomsnitt
	count = 1
	sum = 101758174128
}
rp3 ..> rp1000: ...

Ulempene med denne klassen er flere, bl.a.

...