Pseudozufallstahlen berechnen in java?

2 Antworten

Dazu schreibst du am besten eine Methode. Das könnte dann so aussehen:

class Zufall {
final static int a = 12345, b = 67890, m = 78356, z = 0;

static int zufall() {
z = (a*z+b)%m;
return z;
}

static void main(String[] args) {
for(int i = 0; i < 10; i++) {
System.out.println(zufall());
}
}
}

ich verstehe gerade nich was genau das mod bedeuten soll

0

z würde ich nicht unbedingt final deklarieren, und main() sollte public sein. Aber sonst passt's!

0

Worin genau besteht Dein Problem?

Eine Zufallszahl bekommst Du mit Random() geliefert, danach einfach brechnen.

also ich hab ihm gesagt das zn int a 10 und int b its 1
dann hab ich ihn mit math random ne zahl generieren lassen die ich durch int z=0 Z<10 z++ def habe
und das habe ich dann durch die formel a*z+b berechen lassen
is DAs so richtig?

0
@Rayap

Also, Die 'Formel' ist ein LCG, eine From eines PRNG (Pseudo-Randomg-Number-Generator). math.random nutzt genau diese Formel.

Eigentlich lautet die Formel:

x_i=(a*x_(i-1)+c) % m

Es gibt einige Dinge bei der Wahl der Konstanten a,c,m zu beachten. Das eigentlich wichtige ist aber das X_0, die sogenannte Seed (Saat), also der Startwert des Generators.

Diese sollte möglichst zufällig sein.

Wie der LCG in Java implementiert ist, ist sogar vollständig dokumentiert.

Ich kenne die Aufgabe nicht, von daher weiß ich nicht, was genau als Lösung erwartet wird, aber der LCG ist eigentlich völlig banal zu implementieren.

Letztlich mußt Du nur next=(a*z+c)%m berechnen, wobei z die letzte Zufallszahl ist, sowie a,c,m geeignete Konstanten.

0
@KarlRanseierIII

import java.io.*;

class PseudoZufallsZahlen {
public static void main(String arg[]) {
int a = 10, b = 1, m = 78;

System.out.println(((a*Math.random()+b))%m);
}
}


hab das nu so gelöst und es scheint zu funkrionieren

0
@Rayap

Ja, so funktioniert das.

Normalerweise würde man eben einen Generator schreiben (gibt es in Java wohl nicht in der Form) und gut ist.

Andernfalls würde man eben eien Klasse definieren, im Konstruktor die seed setzen und mit einem next() oder ähnlichem die seed aktualisieren und zurückliefern.

Wie gesagt, Du mußt wissen, was bei der Aufgabe eigentlich gewollt wird.

Achja, die Parameter sind schlecht gewählt, aber das nur am Rande ;-).

0
@KarlRanseierIII

is ne einsteigeraufgabe ins programmieren mit java also denke ich das soll nur fürs grobe verständniss sein daher sind die pameter nich so wichtig
die aufgabe steht oben komplett drin in der frage mehr hab ich auhc nicht xD
Aber danke für die zeit und hilfe bekommst den best =)

0

Warum wird bei Java die Variable "doppelt" eingeführt?

Hallo, ich habe mal eine kleine Frage zu Java bin noch relativ am Anfang aber möchte es gerne so gründlich wie möglich verstehen da ich darüber eine Klausur schreibe! Mein Problem ist folgendes: Ich habe diesen Code:

class Dog extends Animal {

int age;
public Dog(int dogsAge) {
age = dogsAge;
 }

Der Code geht natürlich noch weiter aber meine Frage ist: Warum führe ich erst "age" ein um danach nochmal age=dogsAge zu setzen? Kann ich da nicht einfach direkt den int "age" weglassen? Denn wenn ich das Objekt erstelle benutze ich doch im Prinzip nur die Variable "dogsAge", die Variable "age" brauche ich doch garnicht, oder sehe ich das falsch? Das Bespiel entstammt der Seite codecademy.com, würde mich freuen wenn mir jemand das erläutern könnte :)

Liebe Grüße!

...zur Frage

Was möchtest Du wissen?