Würfel mit 6 Seiten und 100 Würfen programmieren?
Hallo, ich schreibe heute Klausur und habe ein Lösungsblatt von meinem Lehrer bekommen. Leider bin ich in Informatik bisschen verloren und Frage mich: Da fehlt doch noch die 100 oder?
Und wenn ja, wo kommt die 100 hin? ;(
Das Thema sind Arrays
Danke schon Mal
3 Stimmen
hast du den code irgendwo hingedingst? Ich seh nämlich nix... Array beginnt bei index 0... Also gehen die indexe dann bis 99, was dann mit der 0 auch 100 ergibt
Wie du siehst nix? Du musst auf Vollbild klicken, dann wird es scharf.
LG
4 Antworten
Das, was du hast, ist quasi das Grundgerüst. Was noch fehlt ist eine main-Methode, mit der die wuerfle-Funktion aufgerufen wird. Und du musst natürlich noch irgendwie das Ergebnis ausspucken.
public static void main() {
Wuerfeln wuerfeln = new Wuerfeln(); // Da die Methoden in deinem Beispiel nicht statisch sind, muss man ein "Wuerfeln" Objekt erstellen
wuerfeln.wuerfle(100, 6) // Mach 100 Würfe mit einem Sechsseitigen Würfel
System.out.println(Arrays.toString(wuerfeln.we)); // Schreibe auf die Konsole, wie oft welche Seite gewürfelt wurde (Kann man evtl. noch schöner machen)
}
Nein, du kannst es nicht "auch so" schreiben, sondern du brauchst das zusätzlich, um den Code zu benutzen, den du schon hast.
Du kannst natürlich auch alles so umschreiben, dass das gewünschte Ergebnis rauskommt, ohne die Vorlage von deinem Lehrer zu benutzen:
import java.util.Arrays;
import java.util.Random;
public class Wuerfeln {
public static void main(String[] args) {
Random r = new Random();
int[] we = new int[6];
for (int i = 0; i<100; i++) {
we[r.nextInt(6)]++;
}
System.out.println(Arrays.toString(we));
}
}
Ich glaube aber nicht, dass das der Sinn der Übung ist.
Das ist bereits eine schöne, modulare Methode. Kann ja sein, dass sich der Anwender morgen entscheidet nur nur 50 Würfe haben zu wollen.
Theoretisch müsstest du bei dem Methodenaufruf bei der Augenzahl einfach nur eine 100 als Parameter mit übergeben.
Wenn du es unbedingt abändern möchtest, dann mach
int anzahlWuerfe
weg und innerhalb der Methode, die Zählschleife einfach auf 100 Schleifendurchläufe festzusetzen.
Oder, damit es sauberer ist: du initialisierst einen int wert INNERHALB der Methode mit 100 und setzt diesen Wert dann in deine Zählschleife anstelle der anzahlWuerfe.
Aber ich möchte es nochmal erwähnen. So wie es in dem Beispiel ist, finde ich es eigentlch schon sauber gelöst. Trag einfach eine 100 als Parameterwert ein und du hast deine 100 Schleifendurchläufe.
wuerfle(100, 6);
Die Methode mit dem int als Rückgabewert weiter unten, halte ich aber für weniger gutes Design. Die würde ich einfach mit in die Methode "wuerfle" mit reinpacken. Das sagt ja eigentlich schon der Name. Einfach da den Random Wert "auswürfeln" lassen.
Wie sieht es dann aus, wenn die 100 in den Parameter rutscht?
for(int i = 0; i< anzahlWuerfe; i++)
Du hast eine for-Schleife. Der Index beginnt bei 0. Daher hast du dann genau 100 Durchläufe. Er beginnt bei 0 bis < 100.
Die folgende Funktion
wuerle() {}
nimmt zwei Argumente entgegeben.
- Anzahl der Würfe
- Anzahl der Seiten
Somit kann das beim Aufruf bestimmt werden
wuerle(100, 6);
Danke. Stimmt es oder nicht, also was mir mein Lehrer gegeben hat?
Ja der Code ist korrekt und funktioniert. Lass Dich von den Kommentaren hier nicht ablenken, bevor Du daran denken solltest, wie man simpleren bzw. kürzeren Code schreibst, musst Du erstmal die Basics lernen.
Versuch mal 1-2 "Programme" selber zu machen, dann siehst Du soetwas auch von alleine.
Wie oben beschrieben. Irgendwo muss die Methode/Funktion aufgerufen werden. Unter dem Code muss also folgenes stehen:
wuerle(100, 6);
Der Code oben ist korrekt, aber es fehlt der Aufruf.
Ne die fehlen nicht, da steht zwar nicht hundert, aber die Methode wuerfle erlaubt die Anzahl anzugeben.
(Kommentar zum Code: Da gibt es eine schönere Methode die zufällige Zahl zu bestimmen xD)
Hallo, vielen Dank erst mal. Wie geht die schönere Methode?
LG
Random random = new Random();
int rand = random.nextInt(6); // Zahlen von 0 bis 5
Man kann das, was in der Funktion "getZufallszahl" steht, dadurch ersetzen (bzw. anstatt der 6 halt die Variable "grenze" einsetzen)
Bei "random.nextInt(grenze)+1" weiß auch ein Anfänger, was dabei raus kommt. Bei "(int)(grenze * Math.random())+1" müsste man erstmal nachlesen, was die "Math.random()" Funktion überhaupt ausgibt, und warum da die Werte rauskommen, die man haben will.
Das heißt ich kann es auch so schreiben? Das wäre ja um einiges einfacher