Ich möchte ein Programm mit Java erstellen, welches 6 Zahlen 1000 mal zufällig generiert (sollte mit der Math.random Funktion realisiert werden) und dann die Anzahl z.B der 3 in absoluten Zahlen und prozentual ausgibt.
Zahl 1: 155 / 16,3
Zahl 2:233 / 20,4%
...
bis zur Zahl 6
Jedoch weiß ich nicht wie ich dieses Vorhaben realisieren soll. Deshalbe bitte ich um eure Hilfe!
Ich habe ähnliche Beispiele im Internet gefunden, aber dort beginnt das Programm immer so:
Code:
int verteilung [] = new int [6]; // Wozu dienen die eckigen Klammern, und was wird mit dieser Zeile erreicht?
int zufall = 0;
Desweiteren bitte ich um einen Erklärung dieser for Schleife : for (int i = 1; i <= 1000; i++)
// Generiert 6 Zahlen zwischen 0 und 5 per zufall
Math.round ( Math.random()*5 );
Die Zahlen musst du alle in ein array schreiben, das so generiert wird:
int [] x = new int[1000];
mit der Schleife schreibst du alle zahlen die du generierst in das array
for (int i = 0; i < 1000; i++){
x[i] = deinevariable;
}
und das 1000 mal. nun hast du im array die zahlen 0-5 alle im array stehen und musst dir nun etwas überlegen
wie du deine zahlen da rausbekommst. Gleiche Schleife mit einer "IF" abfrage über das array laufen mit einem counter das ganze mitzählen. Prozent rechnen sollte keine schwere sache sein.
Will mir nicht zuviel herausnehmen aber die frage nach den eckigen klammern und was eine schleife macht sollte dir selbst als programmier anfänger bekannt sein da sie die Grundbasis für jede programmiersprache darstellen.
Am besten ein buch lesen (<Programmiersprache> in 21 Tagen ist immer ein guter anfang) und dann kann man auch fragen besser beantworten. Aber erstmal sollten die grundkenntnisse da sein. :=
Leider weiß ist nicht was ein array ist und die Grundkentnisse sind denke ich bei mir schon vorhanden.
So habe ich die Sache mit den Zufallszahlen gelöst:
Code:
while (true)
{
zufall = (int) (6* (Math.random()));
//System.out.println (zufall);
if (i1-- == 0)
break;
}
Und jetzt komme ich nicht an die Zahlen heran, und habe auch keinen Ahnung wie ich jetzt weiter vorgehen soll.
Bitte erspar mit Antworten wie: "musst dir nun etwas überlegen
wie du deine zahlen da rausbekommst. Gleiche Schleife mit einer "IF" abfrage über das array laufen mit einem counter das ganze mitzählen. Prozent rechnen sollte keine schwere sache sein. "
Ich möchte hier kompetenten Support erhalten und nicht irgend welche Andeutungen. Deswegen bitte keinen Tips sondern Lösungen posten.
for (int i = 0 ; i < 1000; i++){
x[i] = (int) (6* (Math.random())); // um deinen lösungsschritt aufzugreifen
// gibt sicher mehrere möglichkeiten hier eine einfache
if (x[i] == 1) count1++;
if (x[i] == 2) count2++;
if (x[i] == 3) count3++;
if (x[i] == 4) count4++;
if (x[i] == 5) count5++;
if (x[i] == 6) count6++;
}
// jetzt stehen alle zahlen im array und sind gleich mitgezählt worden und der count enthält jeweils die menge
// der auftretenden zahlen
Du hast 1000 zahlen generiert. Wenn man (rein statistisch) von einer Normalverteilung aus geht, kann man theoretisch annehmen, dass bei 6 zahlen jede zahl eine Häufigkeit von 1/6 hat. Da aber innerhalb der PC welt alles andere als normalverteilt wird und jede random methode anders zufallszahlen erzeugt schwankt dieser wert.
Nun basteln wir uns eine Dreisatz Methode:
Code:
public double getProzent(int count){
double prozent;
prozent = (count * 100) / 1000;
return prozent;
}
System.out.println(" Die Zahl 1 kam " + getProzent(count1) + "% vor");
Ein Array ist ein Zahlenreihe eines Datentyps mit festgelegter grösse. int [] x = new int[1000] ist demnach ein array von integer werten mit 1000 feldern. Diese felder kannst du über x[0] ... bis x[999] ansprechen. Vorteil ist einfach das du dir ersparst 1000 variablen anzulegen.
Eine For-Schleife ist grob gesagt nichts anderes als eine Kopf gesteuerte While Schleife mit Counter zu unterbrechung an einer bestimmten stelle.
die for schleife hatten wir ja. Wenn du daraus eine While Schleife machen willst kannst du es auf zwei arten machen:
Code:
int count = 0;
while(count ==0){
count++;
}
oder
int count = 0;
while (true){
count++;
if (count == 1000) break;
}
eine For schleife stellt das alles etwas vereinfacht dar und erlaubt bessere kontrolle.
1. BITTE BITTE code tags verwenden
2. einrücken erhöht die lesbarkeit (sonst sieht das echt schlimm aus)
3. das ganze geht einfacher und schneller
da du nach deiner aussage die zahlen danach nicht mehr brauchst, ist das array schonmal überflüssig.
willst du 6 reinzufällige zahlen auf ihre häufigkeit bei 1000versuchen erstellen und ihre häufigkeit zählen ist das ganze garnicht so schwer (auch wenn man es als betrug bezeichnen könnte, da eigentlich die häufigkeit der zahlen 0..5 gezählt wird, aber das ist ja egal, da es nur 6 zahlen gibt)
Code:
Random r = new Random();
int[] blubber = new int[6];
int[] verteil = new int[6];
int puffer;
for(int i=0;i<6;i++){
blubber[i]=r.nextInt();
} //nun hast du deine zufallszahlen
for(int i=0;i<1000;i++){
puffer=Math.abs(r.nextInt())%6);
verteil[i]=verteil[i]+0.1;
}
//dann noch die ausgabe und fertig
der prozenztuale berechnung ist recht sinnlos. wenn du es im nachhinein machen willst, ist count *0.1 sinnvoller, da er so weniger rechnen muss als *100 / 1000
des weiteren ist statt if eine switch konstruktion sinnvoll und wenn schon if dann wenigstens else if