Wie kann ich eine Wahrscheinlichkeit in Java hinzufūgen?
Also das ich zum Beispiel bei Kopf oder Zahl eine Chance von 30% habe Kopf zu bekommen und eine von 70% auf Zahl.
danke fūr die Antworten !
6 Antworten
Das geht ganz einfach mit
Math.random() < chance
Wobei chance ein Double zwischen 0 (0%) und 1 (100%) ist. 30% wären also 0.3.
Dein Beispiel:
boolean isHead = Math.random() < 0.3;
isHead ist mit einer Chance von 30% true (-> Kopf), und zu 70% false (-> Zahl).
Du hast alle drei auf 2 Sekunden gestellt. Da isses ja eigentlich Zufall in welcher Reihenfolge sie ausgeführt werden. Die sind nicht auf die Nanosekunde genau.
Achsoo stimmt, wie kann ich denn ne Reihenfolge festlegen? Dachte Java arbeitet das alles von oben nach unten ab oder sowas.
Scheduler/Timer werden in extra Threads ausgeführt, da gibt‘s dann kein Nacheinander bzw. von oben nach unten mehr, sondern das läuft parallel.
Warum machst du‘s nicht einfach so?
Timer timer4= new Timer();
timer4.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("1...");
System.out.println("2...");
System.out.println("3...geflohen...");
System.out.println("Dein aktueller Stand sieht so aus : + Stand "
System.exit(0);
}
}, 2 * 1000);
Du könntest auch eine Reihenfolge festlegen, indem du das
2*1000
zu unterschiedlichen Werten änderst.
Also z.B.
2*1000 beim ersten
2*1000 + 1 beim zweiten
2*1000 + 2 beim dritten
Dann wird das mit einer Millisekunde Abstand ausgegeben.
Oder warum nicht gleich mit einer Sekunde Abstand, macht für einen Countdown am meisten Sinn.
2*1000
3*1000
4*1000
Hātte es halt gerne nacheinander ausgefūhrt weil man dann so einen spannenden Moment hat.
Achso, du willst das eine 2 Sekunden nach dem anderen ausführen?
Jetz versteh ich was du da machen wolltest haha.
1..
(2 Sekunden warten)
2..
(2 Sekunden warten)
3.. Dein aktueller Stand ...
So, oder? :D
Du könntest anstatt den Timern einfach Thread.sleep(2000) benutzen um dein Programm 2 Sekunden einzufrieren.
Also
...println(1..)
Thread.sleep(2000);
...println(2..)
Thread.sleep(2000);
...println(3... Dein aktueller Stand ...)
Ja genau so! Danke probiere das mal aus :)
Danke, geht, fange aber irgendwie immer, also ist immer true,
String i2 = JOptionPane.showInputDialog("Was für einen Ball möchtest du benutzen ? ");
if (i2.equals("Standardball")) {
boolean isHead = Math.random() < 0.4;
if (isHead = true) {
JOptionPane.showMessageDialog(null, "gefangen");
System.exit(0);
} else JOptionPane.showMessageDialog(null, "geflohen.");
System.exit(0);
ist das nur glück ?
Beim if statement nur isHead oder isHead == true in Klammern haben, ansonsten passiert es, dann isHead auf true gesetzt wird und dadurch immer true zurückgegeben wird.
Hey,
lasse dir eine Zufallszahl zwischen 0-9 generieren. 0-2 wären deine 30% und die 3-9 deine 70%.
Kannst das ganze natürlich auch mit Zahlen von 0-99 oder 0-999 und so weiter machen.
Mfg Jannick (L1nd)
Oder einfach eine Kommazahl zwischen 0 und 1. Dann gehen auch ganz genau Wahrscheinlichkeiten, 33.75% oder sowas.
Hey, danke, habe das jetzt meinem Programm hinzugefūgt. Habe noch eine Frage, wie kann ich machen, dass jede Minute ein Befehl ausgefūhrt wird?
Mit einem Scheduler.
Runnable helloRunnable = () -> {
public void run() {
System.out.println("Hello world");
}
};
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(helloRunnable, 0, 60, TimeUnit.SECONDS);
Oder per Timer:
Timer t = new Timer();
t.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Hello World");
}
}, 0, 60000);
Mittels
https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/util/Random.html
erhälst du gleichverteilte Zufallszahlen. Auf diesen kannst du dir einen Range definieren, der 30% bzw. 70% ausmacht und prüfen, ob die Zufallszahl darin liegt.
Du könntest dir einfach eine Zufallszahl zwischen 0 und 1 generieren (oder einem anderen Intervall) und dann überprüfen, ob der generierte Wert über oder unter einem bestimmten Wert liegt (z. B. 0,7)
Huhu. Sei X ~ U(0, 1), also uniform auf [0, 1] verteilt. Dann ist
Y = 0.5 * (1 + sign(p - X)) ~ Bernoulli(p), denn es gilt
P(Y=1) = P(sign(p - X) = 1) = P(X ≤ p) = p,
P(Y=0) = P(sign(p - X) = -1) = P(X > p) = 1 - p.
Was bedeutet das? Nun, das bedeutet, dass jede Bernoulli Verteilung durch eine uniform verteilte Zufallsvariable berechnet werden kann. Letzteres ist aber in Java implementiert in Form der Methode Math.random().
Hi, weißte warum das nicht funktioniert ?
Das wird irgendwie immer so ausgegeben 1...3...2...