![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Inventar
![]() Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343
|
![]() 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? ![]()
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret." Then he pulled the trigger of his BFG9000. |
![]() |
![]() |
![]() |
#2 |
Veteran
![]() |
![]() 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.
|
![]() |
![]() |
![]() |
#3 |
Inventar
![]() Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343
|
![]() also wenn ichs so machen würde
int zahl = (int) (Math.random() * 15); müßts dann wohl gehen, oder?
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret." Then he pulled the trigger of his BFG9000. |
![]() |
![]() |
![]() |
#4 |
Veteran
![]() Registriert seit: 07.01.2002
Alter: 44
Beiträge: 268
|
![]() ganz einfach:
da Math.random() eine zahl zwischen 0 und 0.9999999 liefert und du mit Code:
int zahl = (int) Math.random() * 15; ^ Zahl zwischen 0 und 0.99999 in int ist immer 0! 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) |
![]() |
![]() |
![]() |
#5 | |
Quantensingularität
![]() |
![]() Zitat:
____________________________________
Was ist klein, grün und dreieckig? Ein kleines grünes Dreieck! Bahnübergänge sind die härtesten Drogen der Welt! Ein Zug und du bist weg! |
|
![]() |
![]() |
![]() |
#6 | |
Inventar
![]() Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343
|
![]() Zitat:
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret." Then he pulled the trigger of his BFG9000. |
|
![]() |
![]() |
![]() |
#7 |
Inventar
![]() Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343
|
![]() 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++; } }
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret." Then he pulled the trigger of his BFG9000. |
![]() |
![]() |
![]() |
#8 |
Veteran
![]() Registriert seit: 07.01.2002
Alter: 44
Beiträge: 268
|
![]() probiers mal mit:
Code:
int[] array = new int[16]; int zz, vorhanden = 0; boolean schonda = false; while(vorhanden < array.length-1) { zz = (int) (Math.random() * 15); for(int i=0; i<=vorhanden; i++) { if(array[i] == zz) { schonda = true; break; } } if(schonda) { System.out.println(zz + " -> ist schon vorhanden"); } else { System.out.println(zz + " -> noch nicht vorhanden"); array[vorhanden] = zz; vorhanden++; } schonda = false; } |
![]() |
![]() |
![]() |
#9 | |
Veteran
![]() |
![]() Zitat:
|
|
![]() |
![]() |
![]() |
#10 | |
Veteran
![]() Registriert seit: 07.01.2002
Alter: 44
Beiträge: 268
|
![]() 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... |
|
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|