Warum wird bei diesem Programm so selten die 6 gewürfelt?

...komplette Frage anzeigen

4 Antworten

Zunächst mal iteriert deine For-Schleife 5000 mal durch. so hast du es ja angegeben in Deiner Zählschleife!

Zum anderen Castest Du einen double Wert in int um, dabei kommt es zwangsläufig zu Rundungsfehlern die sich pro Durchgang aufsummieren.

Antwort bewerten Vielen Dank für Deine Bewertung
ceevee 27.10.2016, 19:54

Das casten rundet immer ab, was in diesem Fall auch beabsichtigt ist. Ein Würfel hat nur ganzzahlige Werte.

0

Es ist halt ein Zufallsgenerator, was die Schwankung erklärt.

BTW: Anstatt ein Gefühl zu haben, dass mehr als 5000 Zahlen generiert werden, mach doch einfach eine Ausgabe, wie viele Zahlen generiert wurden ;)

Antwort bewerten Vielen Dank für Deine Bewertung
Denni173 27.10.2016, 19:25

Brauch er nicht, die For Schleife ist mit Wert = 5000, gesetzt, also zählt sie immer 5000 mal durch.

1

Random ist nicht wirklich zufällig, die Klasse SecureRandom sollte besser fuktionieren und mehr als 5000 Tests sollten auch bessere Ergebnisse liefern.

Antwort bewerten Vielen Dank für Deine Bewertung

int x =(int)(5.0*Math.random()+0.5);

Das ist die entscheidende Zeile und die ist wahrscheinlich falsch, die dürfte eigentlich überhaupt keine 6 zurückliefern. Math.random() erzeugt eine gleichverteilte Zufallszahl kleiner gleich 0 und kleiner 1. Im Maximalfall kriegst du mit der Zeile oben also 5 * 0.999 + 0.5 = 5.495 zurück (ich hab ein paar Nachkommastellen weggelassen, das Prinzip bleibt aber). Durch das (int) am Anfang schneidest du alle Nachkommastellen ab, also kriegst du 5 zurück. Im Minimalfall rechnest du 5 * 0 + 0.5 = 0.5 und kriegst dementsprechend 0 (und nicht 1 zurück). Richtig wäre

zufallszahl = (int)((6 * Math.random()) + 1);

http://javatipps.blogspot.de/2011/08/mathrandom-anwendungsbeispiele-mit.html

anzahlen = new int[6];

Ist ein Array mit den Werten von 0 bis 5. Das würde ich dann entsprechend durch "anzahlen = new int[7] ersetzen. In anzahlen[0] dürfen dann halt keine Werte stehen. Du hast dann zwar einen Arrayplatz verschwendet, machst dir damit aber auch den Quelltext einfacher und besser verständlich, weil du dann nicht mit den Indexen hin und her rechnen musst.

Lieber GF-Editor. Manchmal spinnst du. Und zwar gewaltig.

Antwort bewerten Vielen Dank für Deine Bewertung
Denni173 27.10.2016, 20:00

Jupp, stimmt aber er summiert in der For Schleife mit 1 auf deshalb kommt er auch auf die 6 . Ist halt unsauber gecodet.

0
TeeTier 28.10.2016, 23:27

Lieber GF-Editor. Manchmal spinnst du. Und zwar gewaltig.

Manchmal frage ich mich, ob das der Editor ist, oder doch nicht etwa die Entwickler dieser Plattform hier. ><

Sachen, die ich hier schon vor Ewigkeiten gefunden und gemeldet habe, bei denen sich aber einfach nichts tut: a) Datenbank einsehbar, inklusive Passwörtern, Salt und Hashalgo. b) Einbau von beliebigem HTML-Code über einen Bug im Link-Parser möglich. c) Einfache Möglichkeit das gesamte Backend mit nur einer Hand voll Requests eines einzigen Rechners binnen weniger Sekunden komplett lahm zu legen.

Glaub mal nicht, dass da irgendetwas passiert ist! Immerhin benutzt GF inzwischen für die meisten Requests einen CSRF-Token. Warum eigentlich nicht für ALLE? Wer weiß ... :)

Aber was will man von Entwicklern erwarten, die eine SQL-Anfrage in den AJAX-Code einbauen, der dann Serverseitig ohne weitere Prüfung ausgeführt wird.

Kopf => Tisch! :)

Ich empfinde es als eine bodenlose Unverschämtheit der GF-Entwickler, so einen grottenschlecht zusammengefrickelten Pfusch auf eine größere Community loszulassen und bin gerade ganz ganz stark am überlegen, ob ich hier meinen Account löschen sollte.

Jedesmal wenn ich mir den Quelltext von GF ansehe, läuft mir - natürlich gänzlich ohne bewusst danach zu suchen - eine neue Sicherheitslücke über den Weg, ganz zu schweigen davon, wenn ich mal den Insepector oder Firebug anschmeiße.

Dabei sind dann so Sachen, wie z. B. die Auslieferung einiger Seiten gänzlich ohne jeglichen HTTP-Header (also direkt der Content ... keine Ahnung wie den Server dazu überreden konnten!), seit Jahren bestehende Rechtschreibfehler (z. B. "Hilfr. Antworte" im Tooltip) oder die Tatsache, das das Wort "Ana*ysis" seit über 4 Jahren im Wortfilter hängt und sich wohl nicht austragen lässt, absolute Nebensache.

Edit: Also Ana*ysis ist wohl "vulgär". Zitat:

Leider können wir Deinen Beitrag in dieser Form nicht annehmen, da Wörter enthalten sind, die vulgär, beleidigend oder aus rechtlichen Gründen nicht zulässig sind. Bitte formuliere den Beitrag neu.

Keine weiteren Fragen ... oh man ... ><

1
ceevee 29.10.2016, 20:57
@TeeTier

bin gerade ganz ganz stark am überlegen, ob ich hier meinen Account löschen sollte.

Nein, bitte nicht. Deine Beiträge sind total informativ und kompetent, du hälst hier das Niveau oben, meiner Ansicht nach würdest du eine Lücke hinterlassen. Denk an die armen Fragesteller. :)

Ich hab mir gerade auch mal den Quelltext und den Debugger-Output hier angeguckt... das sieht wirklich total gruselig aus. Meiner Meinung nach wurde GF in den letzten Jahren eher verschlimmbessert, der vorherige Editor hat wunderbar funktioniert und hatte sogar eine kleine Auszeichnungssprache, mit der man Teile des Beitrags z.B. fettdrucken konnte. Der heutige Editor baut manchmal unnötige Zeilenumbrüche ein, manchmal funktioniert es nicht, Teile als Kommentar zu kennzeichnen und die Code-Ansicht ist völlig kaputt. Und bei manchen Fehlern frage ich mich, ob es im Hause GF kein dev-System gibt, auf dem man die Software erstmal testet, bevor man sie rausgibt.

Wie man hier übrigens öfters liest, soll die GF-App noch verbuggter sein als die Webseite. Ich hab die App nicht, ich will sie auch nicht, ich kann das nicht beurteilen.

oder die Tatsache, das das Wort "Ana*ysis" seit über 4 Jahren im
Wortfilter hängt und sich wohl nicht austragen lässt, absolute
Nebensache.

Der Bad-Word-Filter wurde übrigens vor ein paar Jahren mal aktualisiert, so dass der folgende Satz:

"Der Hauptdarsteller der "Fluch der Karibik"-Filme heißt Johnny Depp."

neuerdings erlaubt ist und nicht wegen dem letzten Wort blockiert wird. Das ist also ein weniger schlimmes Wort als die mathematische Disziplin mit "A". ;)

0

Was möchtest Du wissen?