![]() |
java - dummiefrage über Math.random()
nur rein interessehalber möchte ich folgendes wissen:
wenn ich eine zufallszahl (int) ausgeben möchte, die zwischen 0 und 15 sein soll, dann mache ich das so: int zahl = (int) Math.random() * 15; System.out.println(zahl); eine andere möglichkeit wäre: double zahl = Math.random() * 15; System.out.println((int) zahl); nur komischerweise, obwohl beides eigentlich dasselbe bewirken sollte, bringt mir ersteres eine ausgabe von 0 und nur zweiteres wirklich eine entsprechende zufallszahl. kann mir jemand erklären, warum? :confused: |
weil die funktion random() einen wert >= 0 und < 1 liefert und beim casting (typenumwandlung) auf (int) einfach die nachkommastelle abgeschnitten wird, und daher immer 0 rauskommen muss.
|
also wenn ichs so machen würde
int zahl = (int) (Math.random() * 15); müßts dann wohl gehen, oder? |
ganz einfach:
da Math.random() eine zahl zwischen 0 und 0.9999999 liefert und du mit Code:
int zahl = (int) Math.random() * 15; probier mal: Code:
int zahl = (int) (Math.random() * 15); achja: die zahl ist aber zwischen 0 und 14! ( "rand() * 16" liefert eine zahl zw 0 und 15) |
Zitat:
|
Zitat:
|
diese frage ist mir geradezu peinlich
aber ich hock jetzt schon viel zu lange an dem und soviel zeit hab ich heute einfach nicht, d.h. poste ichs trotzdem:
im darunterliegenden java-qt wird die whileschleife endlos ausgeführt, aber ich verstehe beim besten willen nicht, warum. wäre super, wenn mir das jemand sagen könnte, fürs geübte auge isses sicher nur ein kurzer blick. das ganze dient dazu, um ein array mit 16 unterschiedlichen zufallszahlen von 0-15 zu füllen. int[] array = new int[16]; int zz, vorhanden = 0; boolean schonda = false; while(vorhanden < 16) { zz = (int) (Math.random() * 15); for(int i=0; i<array.length; i++) { if(array[i] == zz) { schonda = true; break; } } if(schonda) { schonda = false; System.out.println(zz + " -> ist schon vorhanden"); } else { System.out.println(zz + " -> noch nicht vorhanden"); array[vorhanden] = zz; vorhanden++; } } |
probiers mal mit:
Code:
int[] array = new int[16]; |
Re: diese frage ist mir geradezu peinlich
Zitat:
|
Re: Re: diese frage ist mir geradezu peinlich
Zitat:
der fehler liegt in folgendem: while(vorhanden < 16) { zz = (int) (Math.random() * 15); "Math.random() * 15" liefert zahlen von 0 bis 14, dh. 15 verschiedene zahlen->vorhanden kann niemals 16 erreichen, sondern nur 15 die schleife kann trotzdem recht lange dauern, da man bei schon 14 gezogenen zahlen, die 15. "zufällige" genau die übriggelassene sein muss, dh. im schnitt 15 durchläufe für die letzte+14 für die vorletzte usw... |
Alle Zeitangaben in WEZ +2. Es ist jetzt 01:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag