Zeitbestimmende Randomzahl

Status
Nicht offen für weitere Antworten.

eliteSchaf

Mitglied
Morgen erstmal! Hoffe das ist das richtige Unterforum für meine Frage :wink:

Also meine Aufgabe: Ich brauch Zufallszahlen die zB am Freitag um xx Uhr (geht bis auf Sekunden zurück) immer die gleiche Zufallszahl erzeugen. Also das am 11.08 um 12:14 und 24 Sekunden die gleiche Zahl rauskommt wie am 18.08 um 12:14 und 24 Sekunden.

Meine Frage: Wie realisiert man so was am besten? ???:L

Dexter
 

padde479

Bekanntes Mitglied
Ist es dann noch zufällig, wenn man zu einer bestimmten Uhrzeit an einem Tag immer die gleiche Zufallszahl generiert?
 

Murray

Top Contributor
Was Du machen willst / sollst, ist keine Zufallszahl, sondern etwas, das sich reproduzierbar aus dem Datum errechnet. Du braucht dazu zunächst mal die Klasse java.util.Date; mit
Code:
Date now = new Date();
erzeugst Du ein Objekt mit dem aktuellen Datum. Davon brauchst Du für Deine Berechnung den Wochentag und die Uhrzeit in Stunden, Minuten und Sekunden. Dazu gibt es in der Klasse java.util.Date entsprechende get-Methoden, aber deren Verwendung wird - wegen der fehlenden Lokalisierungsmöglichkeiten - nicht mehr empfohlen. Das wäre in diesem Fall zwar eigentlich nicht so relevant, aber um keine Warnungen des Compilers zu bekommen, solltest Du zum Zugriff auf diese Daten einen java.util.Calendar verwenden:
Code:
Calendar cal = Calendar.getInstance();
cal.setTime( now);
int day = cal.get( Calendar.DAY_OF_WEEK);
int hrs =  0; //--- hier mal selber in die API-Doku sehen ;-)
int min = 0;
int sec = 0;

So, jetzt hast Du die vier Komponenten, aus denen Du nach einem beliebigen Algorithmus eine Zahl berechnen kannst.
 

byte

Top Contributor
Diese Werte z.B. zu einem long zusammensetzen. Den kann man dann als Seed an einen Random Generator übergeben, der dann pseudozufällig zu jeder Wochenzeit die gleichen Zahlen erzeugt.
 

Murray

Top Contributor
Random sehe ich bei der Aufgabenstellung eigentlich nicht: gefragt ist doch lediglich ein Algorithmus, der zu einem bestimmten Zeitpunkt das gleicher Ergebnis liefert wie zur gleichen Uhrzeit des gleichen Wochentags in irgendeiner anderen Woche.
 

eliteSchaf

Mitglied
Ja genau und ich versuche das so einfach wie möglich zu realisieren, weil ich noch nicht so fortgebildet in java bin :lol:

Dexter
 

byte

Top Contributor
Murray hat gesagt.:
Random sehe ich bei der Aufgabenstellung eigentlich nicht: gefragt ist doch lediglich ein Algorithmus, der zu einem bestimmten Zeitpunkt das gleicher Ergebnis liefert wie zur gleichen Uhrzeit des gleichen Wochentags in irgendeiner anderen Woche.

Es wurde nach Zufallszahlen gefragt und nichts anderes erzeugt doch Random. Wenn Du einfach nur die Uhrzeit als Zahl kodierst, so ist das aus mathematischer Sicht keine Zufallszahl, dann hast Du einfach nur eine als Zahl kodierte Uhrzeit, die man mit Geschick auch reproduzieren kann, ohne den Algorithmus zu kennen. Die wirklichen Zufallszahlen von Random kannst du nur reproduzieren, wenn Du den Seed kennst, also den Algorithmus. Außerdem wurde bisher nix drüber gesagt, in welchem Zahlenraum sich die Zufallszahlen überhaupt bewegen sollen. Da wärst Du mit Random flexibel. Und bei Bedarf schmeisst man den Seed einfach raus und hat echte Zufallszahlen, die gar nicht reproduzierbar sind.

Naja, muss der Threadersteller halt wissen, was wirklich gefordert ist. ;)
 

Murray

Top Contributor
byto hat gesagt.:
Wenn Du einfach nur die Uhrzeit als Zahl kodierst, so ist das aus mathematischer Sicht keine Zufallszahl, dann hast Du einfach nur eine als Zahl kodierte Uhrzeit, die man mit Geschick auch reproduzieren kann, ohne den Algorithmus zu kennen. Die wirklichen Zufallszahlen von Random kannst du nur reproduzieren, wenn Du den Seed kennst, also den Algorithmus. Außerdem wurde bisher nix drüber gesagt, in welchem Zahlenraum sich die Zufallszahlen überhaupt bewegen sollen. Da wärst Du mit Random flexibel. Und bei Bedarf schmeisst man den Seed einfach raus und hat echte Zufallszahlen, die gar nicht reproduzierbar sind.
Stimme ich Dir sofort zu - ich würde diesen Teile der Frage
eliteSchaf hat gesagt.:
Also das am 11.08 um 12:14 und 24 Sekunden die gleiche Zahl rauskommt wie am 18.08 um 12:14 und 24 Sekunden
allerdings so verstehen, dass es eben nicht wirklich um Zufallszahlen geht.


byto hat gesagt.:
Naja, muss der Threadersteller halt wissen, was wirklich gefordert ist. ;)
Genau.
 

kaie

Bekanntes Mitglied
Probier mal Folgendes:
Code:
double zufall = new java.util.Random(((System.currentTimeMillis()/1000)%(7*24*60*60))).nextDouble();
Liefert jede Woche am gleichen Tag um die gleich Uhrzeit die gleiche Kommazahl zwischen 0 und 1.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben