BlueJ Math.random()
ich habe das Problem, das ich gerne ein Rechenprogramm für meinen Bruder schreiben möchte, indem zwei zufällige Zahlen angezeigt und dann zusammengerechnet werden sollen. leider kommt, wenn ich Math.random() benutze, immer die gleiche Zahl heraus. kann mir jemand helfen?
3 Antworten
Ändere deine Methode hatRandom etwas ab:
static protected int retRandomInt(int höchstwert){ Random r = new Random(); return r.nextInt(höchstwert)+1; }
Für den Fall, dass du ein double willst:
static protected double static protected double RandomDouble(int höchstwert){ Random r = new Random(); return r.nextDouble()*höchstwert; }
danke, aber ich hab es jetzt doch endlich geschafft, und es laüft super :D
Ich weiß zwar ned wie es in JAVA ist, aber bei anderen Programmiersprachen z.b. von C# kenne ich es so, dass Mathf.Random, eine Zahl zwischen 0 und 1 liefert und die auf eine INT abrundet.
Du musst also entweder ein Bereich angeben (meist durch Math.random(Min,Max)) oder du Multiplizierst einfach mit der Maximalen Zahl, was aber nur funktioniert wenn dir die Funktion keine abgerundete INT liefert. sonst multiplizierst ne 0 mit irgend einer bel Zahl was dir so oder so immer 0 liefert.
Ich weiß nicht welches Problem du hast JavaTheHutt.
Da bis zu der Zeit noch niemand auf die Frage geantwortet hatte, habe ich meine Hilfe in Ableitung anderer Programmiersprachen angeboten. Was ja scheinbar dem Fragesteller der Lösung etwas näher gebracht hat.
Der Fragesteller war in der Lage meine Antwort zu abstrahieren und auf sein Problem bzw. seine verwendete Programmiersprache anzuwenden.
In dem Fall ist eine Antwort auch wenn sie vlt nur zu Teilen die Problematik löst, besser, als wenn der Fragesteller keine Antwort erhält.
Der Fragesteller war scheinbar, im Gegensatz zu dir, tatsächlich in der Lage die Angebotene Lösung zu abstrahieren, was auch eine wichtige Eigenschaft für alle ist die das Programmieren beherrschen wollen. Aber ich denke mit viel Übung wird dir dies auch irgendwann gelingen.
das mit dem multiplizieren habe ich gemacht, funktioniert auch. aber wenn ich in einer Methode zwei mal den Befehl Math.random benutze, kommt immer die gleiche Zahl dabei heraus...
private double hatRandom1() { return Math.random(); }
private double hatRandom2()
{
return Math.random();
}
/**
* Vorher: Ereignis GeklicktvonhatKnopfMinus fand statt.
* Nachher: (schreiben Sie, was in dieser Methode ausgefuehrt wird)
*/
public void hatKnopfMinusGeklickt()
{
double hatZufallszahl = hatRandom1();
double r = hatZufallszahl;
r = r*100;
int b = (int) Math.round(r);
double hatZufallszahl2 = hatRandom2();
double g = hatZufallszahl;
g = g*100;
int c = (int) Math.round(g);
hatTyp.setzeInhalt("minus rechnen -");
a = 2;
hatZeichenbereich1.setzeInhalt(b);
hatZeichenbereich2.setzeInhalt(c);
}
Im Paket "java.util" gibt es die Klasse "Random". In deinem Falls ist es wohl das einfachste diese Klasse zu verwenden.
Random rnd = new Random();
rnd.nextInt();
Du kannst der Funktion "nextInt()" auch noch einen Int-Parameter mitgeben, sodass eine Zahl zwischen 0 und dem Parameter zurückgegeben wird.
Doku findest du unter: http://docs.oracle.com/javase/8/docs/api/java/util/Random.html
ja, das habe ich schon versucht. leider ist von underer Informatik Lehrerin die Bibliothek Stifte und Mäuse vorgegeben, irgendwie scheint java die Klasse Random() nicht zu finden... schade...
Ich wollte dir auch nextDouble empfehlen. http://docs.oracle.com/javase/7/docs/api/java/util/Random.html#nextDouble()
Du könntest mal nach "Math.random() seed" suchen. Man kann dem Wert der Random-Funktion einen Initialwert z. B. aktuelle Systemzeit mitgeben. Dann erhältst du bei random() nicht immer die gleiche Zahl. Ich finde es gerade nicht.
Ich kenne mich mit dieser Bibliothek nicht aus, allerdings solltest du auf alle Pakete der normalen Java-API zugreifen können.
Um die Klasse Random benutzen zu können, musst du in deiner Quellcodedatei ganz oben das Paket importieren. Das machst du mit:
import java.util.Random;
Ok, es ist nicht wirklich ein Initialwert. Es gibt die Methode setSeed.
Hier ein Beispiel: http://coobird.net/programming/random.html
Random r = new Random();
r.setSeed(System.currentTimeMillis());
Dann antworte auch nicht. Die Frage ist speziell auf Java bezogen und somit sollte sich die Antwort auch auf Java beziehen.
Man könnte auch sagen, dass man z.B. in Delphi erst den Befehel "randomize()" verwenden muss, um Zufallszahlen zu erzeugen, das hilft dem Fragenden aber nicht weiter.