Erste Schritte Wuerfelspiel mit Math.random()

Thorwine

Mitglied
Hallo Java.Community!

Ich bin Umsteiger von VB.net auf Java und habe vor vielen Jahren Fachinformatiker (Anwendungsentwicklung) gelernt. Allerdings habe ich mich in den letzten 10 Jahren mehr auf Systemintegration, Netzwerke und Administration spezialisiert und code jetzt nur noch aus Spiel, Spaß und Entspannung :)

Ich hab grad in der Mittagspause ein simples Wuerfelspiel gebastelt, das die Math.random() Funktion nutzt, mit der ich noch etwas auf Klappstuhl stehe. Es scheint schon zu funktionieren, aber ich wuesste gerne, was ich besser machen kann, was evt. nicht den Konventionen entspricht, oder was ich weglassen kann.

Koennte mal bitte jemand drueberschauen und bissl was dazu sagen?
Ich wuerde mich sehr freuen! DANKE!

Java:
package mypackage;

import javax.swing.*;

public class Wuerfelspiel {

    public static void main(String[] args) {
        String sAnzahlWuerfel;
        int iAnzahlWuerfel = 0;

        String sAnzahlSeiten;
        int iAnzahlSeiten = 0;

        int iMin = 0;
        int iMax = 0;
        int ergebnis = 0;

        sAnzahlWuerfel = JOptionPane.showInputDialog("Wieviele Wuerfel?");
        iAnzahlWuerfel = Integer.parseInt(sAnzahlWuerfel);

        sAnzahlSeiten = JOptionPane.showInputDialog("Wieviele Seiten haben die Wuerfel?");
        iAnzahlSeiten = Integer.parseInt(sAnzahlSeiten);

        iMin = iAnzahlWuerfel;
        iMax = iAnzahlWuerfel * iAnzahlSeiten;

        ergebnis = (int) (Math.random() * iMax) + iMin;
        JOptionPane.showMessageDialog(null, "Ergebnis: " + ergebnis);
    }
}
 
K

kneitzel

Gast
Das entspricht von der Wahrscheinlichkeit her ja nicht dem Würfelspiel.

Wenn Du mit 2 Würfeln würfelst, die jeweils 6 Seiten haben, dann ist zwar der kleinste Wurf 1 und der größte mögliche Wurf 12, aber die Wahrscheinlichkeit für eine 2 oder 12 ist doch nicht so hoch, wie für eine 7. Für die 2 oder 12 gibt es nur eine Kombination. Aber die die 7 gibt es ganz viele Kombinationen:
1 + 6
2 + 5
3 + 4
4 + 3
5 + 2
6 + 1
Also eine 6fach höhere Wahrscheinlichkeit. Und das bildest Du ja nicht ab.
 

Joose

Top Contributor
Deklariere die Variablen erst wenn du sie benötigst.
-> Bei deinem Code deklarierst du zuerst alle Variablen und dananch beginnt der eigentliche Code, dadurch wird der Code unnötig lange und du musst dir für die Variablen Initialisierungswert überlegen (unnötig).
Hier eine bessere Beschreibung dazu: http://c2.com/cgi/wiki?DeclareVariablesAtFirstUse

Vermeide bei den Variablen Prefixe wie "i" für die int Variablen.
-> unnötige Schreibarbeite und auch nicht wirklich lesbar

Die Variablen "sAnzahlWuerfel" und "sAnzahlSeiten" werden nur gebraucht um den eingegeben Wert zu speichern und diesen danach in ein int umzuwandeln. Deklariere stattdessen eine String Variable "input" und verwende diese für die eingelesenen Sachen.
-> Wozu 2 Variablen deklarieren welche nur für ein "kurzes" Zwischenspeichern gebraucht werden, wenn es mit einer auch geht

Ansonsten gibts nicht viel zu sagen :)
 

Thorwine

Mitglied
@kneitzel Danke fuer den Hinweis, das ist natuerlich absolut richtig!
Aber diese Geschichte uebersteigt (zumindest fuer den Moment!) meine Faehigkeiten, vorallem mit einer variablen Anzahl von Wuerfeln und deren Seiten...
Ich bin doch schon ganz gluecklich, das so hinzubekommen :D
 
K

kneitzel

Gast
Also ich bin fest davon überzeugt, dass Du jetzt Dein Licht unter einen Scheffel stellst....

Ich bin sicher, dass Du eine Schleife hin bekommst. Und dann kannst Du ja einfach so oft würfeln, wie es Würfel geben soll. Und das Ergebnis wird dann so nach und nach zusammen gezählt. Willst Du es mal versuchen? Und dabei die Vorschläge / Hinweise von Joose einarbeiten?
 

Thorwine

Mitglied
@Joose Ich schaetze, man sieht da noch meine roots, wie ich es in VB mal gelernt habe :confused:
Danke fuer die Tipps, siehe unten...

@kneitzel Danke fuer die Motivation, Schleifchen sollte ich hinbekommen Erst noch eine Version mit dem gleichen Stand, aber Jooses Gedanken eingebaut:

Java:
package mypackage;

import javax.swing.*;

public class Wuerfelspiel {

    public static void main(String[] args) {
    
        String input;
    
        input = JOptionPane.showInputDialog("Wieviele Wuerfel?");
        int anzahlWuerfel = Integer.parseInt(input);
    
        input = JOptionPane.showInputDialog("Wieviele Seiten haben die Wuerfel?");
        int anzahlSeiten = Integer.parseInt(input);
    
        int min = anzahlWuerfel;
        int max = anzahlWuerfel * anzahlSeiten;

        int ergebnis = 0;
        ergebnis = (int) (Math.random() * max) + min;
        JOptionPane.showMessageDialog(null, "Ergebnis: " + ergebnis);
    }
}

Sollte ich die Variablen min und max auch weglassen und dafuer anzahlWuerfel und anzahlSeiten direkt in die Math.random() Funktion einsetzen?
 
Zuletzt bearbeitet:

Joose

Top Contributor
Sollte ich die Variablen min und max auch weglassen und dafuer anzahlWuerfel und anzahlSeiten direkt in die Math.random() Funktion einsetzen?

Darüber lässt sich streiten ;)
Für Anfänger ist diese Variante sicher die lesbarere und sicherere. Aber natürlich sollte man den Code einfach halten -> Sprich bei einer komplexeren Rechnung ist es vielleicht von Vorteil Zwischenergebenisse auszurechnen oder ähnliches.
 

Thorwine

Mitglied
OK, dann lass ich diesen Code mal so als Wuerfelspiel1 stehen und versuche mich an kneitzels Gedanken mit der Schleife. Danke fuer's Erste! :)
 

Thorwine

Mitglied
So, dann hau ich noch einen raus vor dem Wochenende. Schaut's euch bitte mal an, geht das so durch?

Java:
package mypackage;

import javax.swing.*;

public class Wuerfelspiel2 {

    public static void main(String[] args) {

        String input;

        input = JOptionPane.showInputDialog("Wieviele Wuerfel?");
        int anzahlWuerfel = Integer.parseInt(input);

        input = JOptionPane.showInputDialog("Wieviele Seiten haben die Wuerfel?");
        int anzahlSeiten = Integer.parseInt(input);

        int ergebnis = 0;
        for (int counter = 1; counter <= anzahlWuerfel; counter++) {
            int wurf = (int) (Math.random() * anzahlSeiten) + 1;
            ergebnis = ergebnis + wurf;
        }

        JOptionPane.showMessageDialog(null, "Ergebnis: " + ergebnis);
    }
}

Allen schonmal vielen Dank fuer eure konstruktive Kritik und ein schoenes Wochenende! :)
 
K

kneitzel

Gast
Ja super! Also komm mir nicht noch einmal mit "übersteigt meine Fähigkeiten" :)

Also einfach trauen und wenn Du irgendwo doch mal hängst, dann kommst Du einfach ins Forum damit und dann wird Dir schon weiter geholfen!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P 2n Potenzieren ohne Math.pow oder pow Java Basics - Anfänger-Themen 8
J Math.Random Java Basics - Anfänger-Themen 9
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
sserio Math. Befehl wird rot markiert Java Basics - Anfänger-Themen 5
W Bestimmte Zahlen bei Math.random ausschließen? Java Basics - Anfänger-Themen 31
S Math.random funktioniert nicht Java Basics - Anfänger-Themen 5
alialhajhossein math.random Java Basics - Anfänger-Themen 3
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
V Erste Schritte Berechnen von Sinus; sin(x) ohne Math.* Java Basics - Anfänger-Themen 1
D Wahrscheinlichkeiten mit Math.random() Methode Java Basics - Anfänger-Themen 1
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
B Math.random mit Boolean array? Java Basics - Anfänger-Themen 17
B Potenzrechnung mit WindowBuilder ohne math.pow() Java Basics - Anfänger-Themen 1
I math.random Grenzwerte Java Basics - Anfänger-Themen 2
E Methoden Math.Random() kürzen ? Java Basics - Anfänger-Themen 2
B Potenzen ohne Math.pow Java Basics - Anfänger-Themen 4
N Datentypen Math.floor rundet nicht ab Java Basics - Anfänger-Themen 4
J Klassen Math && Random: wie zufällig sind Zufallszahlen? Java Basics - Anfänger-Themen 19
S Math.ceil für float Java Basics - Anfänger-Themen 1
J Methoden Math.random unklar Java Basics - Anfänger-Themen 4
S Math.random() Zufall ? Java Basics - Anfänger-Themen 2
H Ist Math.Random() eine Methode oder ein Methodenaufruf (Klausurfrage) Java Basics - Anfänger-Themen 4
M Warum ist dieses Feld der Klasse Math immutable? Java Basics - Anfänger-Themen 7
X Problem mit Math.random() Java Basics - Anfänger-Themen 2
S math Methoden in Java (quadrat) Java Basics - Anfänger-Themen 7
T Random vs. Math.random() Java Basics - Anfänger-Themen 2
C Erste Schritte Math.sin und Co. funktionieren nicht Java Basics - Anfänger-Themen 5
A Potenzen ohne math.pow Java Basics - Anfänger-Themen 1
B Verstehe ZufallInt = (int) (Math.random() * 5 + 1); nicht Java Basics - Anfänger-Themen 9
L Klassen Point- und Math-Klasse Java Basics - Anfänger-Themen 3
J Musterlösung Verständnis Frage zu Math.abs() Java Basics - Anfänger-Themen 5
J java.lang.math asin() Java Basics - Anfänger-Themen 18
T Zufallserzeugung mit math.random und speichern in array Java Basics - Anfänger-Themen 29
L Math.floor und double Array Java Basics - Anfänger-Themen 13
J Woher kommt das Objekt "Math" bei Math.random(); ? Java Basics - Anfänger-Themen 3
P Typecasting für Ganzzahlige Zufallszahl (Math.random) Java Basics - Anfänger-Themen 2
B Math.acos() Java Basics - Anfänger-Themen 4
N Methoden Probleme mit Math.cos Java Basics - Anfänger-Themen 3
J Bedeutung von math.random() math.round() Java Basics - Anfänger-Themen 7
J Methoden Rekursive Potenz ohne Math.Pow() Java Basics - Anfänger-Themen 9
Luk10 3. Wurzel mit Math.pow(x, (1/3)) Java Basics - Anfänger-Themen 2
F Problem Math.random in for-Schleife Java Basics - Anfänger-Themen 8
R (Math.random()*49) zahl darf aber nur einmal gezogen werden Java Basics - Anfänger-Themen 11
J Datentypen Math.sqrt() immer NaN Java Basics - Anfänger-Themen 8
T Ungenaue Werte bei Math.atan Java Basics - Anfänger-Themen 10
C math.random() Java Basics - Anfänger-Themen 9
M Math.round Java Basics - Anfänger-Themen 32
M Math Class Java Basics - Anfänger-Themen 2
R math.random wertebereich 16-21 Java Basics - Anfänger-Themen 3
B Math.random und Strings Java Basics - Anfänger-Themen 13
B Math.abs Java Basics - Anfänger-Themen 4
Haave Postfix-Rechner: mehrere math. Operationen nacheinander ausführen Java Basics - Anfänger-Themen 8
Luk10 math.random() Java Basics - Anfänger-Themen 2
T Math.signum Java Basics - Anfänger-Themen 2
N Math + Variablen + Ausgabe Java Basics - Anfänger-Themen 2
B math. Operationen + Ausgabe Fehler :S Java Basics - Anfänger-Themen 5
J Math.random() - kurze frage. Java Basics - Anfänger-Themen 20
C math.pow funktionert nicht richtig oder garnicht Java Basics - Anfänger-Themen 4
G Quelltext von Methoden in der Klasse Math Java Basics - Anfänger-Themen 11
D runden ohne math! (zur not auch mit) Java Basics - Anfänger-Themen 9
G Klasse Math Java Basics - Anfänger-Themen 2
T Math.tan() Problem Java Basics - Anfänger-Themen 2
M Math.sin in Radiant in Java? Java Basics - Anfänger-Themen 5
C Math-Funktion Java Basics - Anfänger-Themen 10
S Math.tan Problem rechnet falsches Ergebniss aus. Java Basics - Anfänger-Themen 3
F Math.abs() Java Basics - Anfänger-Themen 3
J Math.random Java Basics - Anfänger-Themen 12
M Probleme mit Math.round() Java Basics - Anfänger-Themen 5
P Math.abs, praktische Anwendung? Java Basics - Anfänger-Themen 4
T Math.random() Zahlen von 25 - 50. Wie? Java Basics - Anfänger-Themen 7
H Brauche ganz dringend HILFEEE! Math random Java Basics - Anfänger-Themen 19
T Math.Random negativer Intervall Java Basics - Anfänger-Themen 2
M Eclipse: Fehler bei: import java.lang.math Java Basics - Anfänger-Themen 7
B Zahlenwiederholung bei Math.random verhindern Java Basics - Anfänger-Themen 4
D math und abs() Java Basics - Anfänger-Themen 14
J Zufallszahl ohne Math.random Java Basics - Anfänger-Themen 4
E Problem mit Methode Math.max Java Basics - Anfänger-Themen 2
A Probleme mit Math.random Java Basics - Anfänger-Themen 4
G Math.cos Java Basics - Anfänger-Themen 4
S Math-Befehl für Quadrieren! Java Basics - Anfänger-Themen 6
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
laxla123 Bedeutung int random Java Basics - Anfänger-Themen 3
monsterherz Arbeiten mit Random Java Basics - Anfänger-Themen 12
XWing Random Punkte erstellen mit der Random klasse Java Basics - Anfänger-Themen 15
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
K Problem mit "Random" Java Basics - Anfänger-Themen 5
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
S Random(x,y,z) Java Basics - Anfänger-Themen 4
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
L Zufälliges Objekt aus der ArraylList ohne java.util.Random Java Basics - Anfänger-Themen 56
W Random Zahl unter Berücksichtung eines Durchschnitts Java Basics - Anfänger-Themen 7
T Random soll Zufallszahl beibehalten. Java Basics - Anfänger-Themen 11
C Arraywerte random vertauschen Java Basics - Anfänger-Themen 2
SchmidiMC Methoden Random in Methode neu generieren lassen Java Basics - Anfänger-Themen 1
J Operatoren Random wird nur einmal erstellt und dann immer verwendet Java Basics - Anfänger-Themen 2
D Erste Schritte Random erzeugen Java Basics - Anfänger-Themen 28
D Erste Schritte Random Java Basics - Anfänger-Themen 79
Z Problem mit "Random" in Java Java Basics - Anfänger-Themen 12
Z Array-Index einmalig je mit Random füllen Java Basics - Anfänger-Themen 7
J Wie lege ich eine durch Random ausgesuchte Zahl in ein Array? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben