Würfel mit 6 Seiten und 100 Würfen programmieren?

Das Ergebnis basiert auf 3 Abstimmungen

Ja 100%
Nein 0%
chilly10  07.07.2020, 07:54

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

Chris9637 
Fragesteller
 07.07.2020, 08:00

Wie du siehst nix? Du musst auf Vollbild klicken, dann wird es scharf.

LG

4 Antworten

Ja

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)
	}

Chris9637 
Fragesteller
 07.07.2020, 08:38

Das heißt ich kann es auch so schreiben? Das wäre ja um einiges einfacher

0
daCypher  07.07.2020, 10:20
@Chris9637

Nein, du kannst es nicht "auch so" schreiben, sondern du brauchst das zusätzlich, um den Code zu benutzen, den du schon hast.

1
daCypher  07.07.2020, 10:30
@Chris9637

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.

1

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.

Woher ich das weiß:eigene Erfahrung

Chris9637 
Fragesteller
 07.07.2020, 08:30

Wie sieht es dann aus, wenn die 100 in den Parameter rutscht?

0
Nevron  07.07.2020, 08:36
@Chris9637
 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.

1

Die folgende Funktion

wuerle() {}

nimmt zwei Argumente entgegeben.

  1. Anzahl der Würfe
  2. Anzahl der Seiten

Somit kann das beim Aufruf bestimmt werden

wuerle(100, 6);
Woher ich das weiß:Studium / Ausbildung – Fachinformatiker für Systemintegration / Freelance als AWE

Chris9637 
Fragesteller
 07.07.2020, 08:06

Danke. Stimmt es oder nicht, also was mir mein Lehrer gegeben hat?

0
flumex  07.07.2020, 08:08
@Chris9637

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.

2
Chris9637 
Fragesteller
 07.07.2020, 08:25
@flumex

Aber muss da sicher nicht noch 100 rein, weil woher weiß dann das Programm, wann es aufhören soll? Ist ja in einer schleife drin

0
flumex  07.07.2020, 08:51
@Chris9637

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.

2

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)


Chris9637 
Fragesteller
 07.07.2020, 07:57

Hallo, vielen Dank erst mal. Wie geht die schönere Methode?

LG

0
colum123  07.07.2020, 07:59
@Chris9637
Random random = new Random();
int rand = random.nextInt(6); // Zahlen von 0 bis 5
3
Chris9637 
Fragesteller
 07.07.2020, 08:01
@colum123

Kann man das so viel kürzer schreiben???? Das war's??

0
daCypher  07.07.2020, 08:24
@Chris9637

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.

2