[Anfänger] DiceGame Aufagbe

PolterGEEK

Mitglied
Hallo liebe Java-Gemeinde,

da ich bald von der Schule aus Java lernen darf, wollte ich mich gern schon mal in Java richtig einarbeiten (Um nicht nachher mit schlechten Noten da zustehen). Zudem habe ich schon immer auf Java geschielt, da ich gerne eine Sprache lernen wollte mit der ich ohne große Änderungen für verschiedene System programmieren kann. Da kommt Java halt genau richtig ;)

Nun ja will nicht länger um den heißen Brei reden. Ich habe gestern angefangen mit der online Version von der Insel Java zulernen. Und da man ja nur dich selber machen lernt, hab ich natürlich auch direkt angefangen die Aufgaben dazu zu lösen. Nun bin ich bei dem hier sicher schon recht bekannten Würfelspiel.

Meine Lösung sieht ein wenig anders aus als die des Autors, macht aber meiner Meinung das Selbe ( Sofern ich das schon einschätzen kann :p)
Ich würde jetzt gerne ein Feedback einholen, wo ich noch drauf achten sollte oder was ich vielleicht total unglücklich gelöst habe.

Hier nun mein Code :

Java:
public class CubeGame {

    public static void main(String[] args) 
    {
        double price = 0.5; 
        
        for (int i = 1; i < 1000; i++)
        {
            int diceOne = (int) (Math.random() * 6 + 1);
            int diceTwo = (int) (Math.random() * 6 + 1);
            int points = diceOne + diceTwo;
            
            switch (points)
            {
                case (7) : case (8) : case (9) :
                    break;
                case (10) :
                    price = price + 0.5;
                    break;
                case (11) :
                    price = price + 1;
                    break;
                case (12) :
                    price = price + 1.5;
                    break;
                default :
                    price = price - 0.5;
                    break;
            }
        }
        System.out.println(price);
    }
}

Mit freundlichen Grüßen
Der PolterGEEK

edit: Hier wäre die Aufgabe :

Wir sollen untersuchen, ob wir bei einem Spiel mit zwei Würfeln gute Chancen auf Gewinn haben. Gespielt wird mit zwei Würfeln mit den Augen 1 bis 6, deren Werte addiert werden. Wir beginnen das Spiel mit 50 Cent. Der Gewinn berechnet sich nach der unten stehenden Auszahlungstabelle.

Augensumme Auszahlung Gewinn
12 4facher Einsatz +1,50 Euro
11 3facher Einsatz +1,00 Eruo
10 2facher Einsatz +0,50 Euro
7,8,9 Einsatz zurück +0,00 Euro
2,3,4,5,6 keine -0,50 Euro
Lohnt es sich, an diesem Spiel teilzunehmen? Simuliere in einer Schleife (etwa mit 1.000 Durchläufen), ob man auf Dauer gewinnt oder eher verliert. Die Würfelsumme kann man mit Zufallszahlen simulieren. Gib das erwirtschaftete oder verlorene Geld am Ende aus.

uhhh *peinlich* breaks vergessen :oops:
Hab mich schon gewundert, das ich so viel gewinne :oops:
 
Zuletzt bearbeitet:
M

Marcinek

Gast
30 Zeilen Code :toll:

jo. Ich habe nix dran auszusetzen. Außerdem kenne ich die Anforderungen nicht.
 
G

Gast2

Gast
Da fehlen zumindest mal die
Code:
break;
Anweisungen bei den meisten cases (falls das nicht beabsichtigt ist).
Aber ohne Aufgabe kann man zur Richtigkeit der Lösung nur wenig sagen ;)
 

PolterGEEK

Mitglied
Java:
// Dein code
case (12) :
                    price = price + 1.5;
                    break;
//4facher Einsatz wohl eher
case (12) :
                    price = price*4 + 1.5;
                    break;
beim Rest dann genauso.
So verstehe ich die Aufgabenstellung zumindest.

Gruß Vanny

Also ich habe das so verstanden das man das 4 Fache seines Einsatzes bekommt, was bei 0.5 = 2 wäre also + 1.5 weil ich ja nicht zu Beginn der Schleife 0.5 Einsatz abziehe.
Im Original wird das tabellarisch dargestellt, in dieser Form :
Spalte eins Augenzahl
Spalte zwei zB 4-Facher Einsatz
Spalte drei +1.5

Leider hab ich nicht darauf geachtet, das die Einrückung hier nicht vorhanden ist, daher sieht es so komisch aus.

Die originale Aufgabe ist von dieser Seite :
Aufgabe
 
Zuletzt bearbeitet:
V

vanny

Gast
ok ^^ wenn´s dann mal ne Tabelle war und die +1,50 nur als Erklärung da steht, haste natürlich recht:D

Gruß Vanny
 

AquaBall

Top Contributor
Also ich habe das so verstanden das man das 4 Fache seines Einsatzes bekommt, was bei 0.5 = 2 wäre also + 1.5 weil ich ja nicht zu Beginn der Schleife 0.5 Einsatz abziehe.

Dann sollte aber die Zeile heißen:
Code:
price = price*4;
dmit man die Aufgabe/Angabe wiedererkennen kann. ("4-fache")
Aoßerdem wäre es dann unabhängig von einer Änderung des Einsatzes,
gilt aber nur falls jedesmal der gesamte Betrag eingesetzt wird.
oder
Code:
price = price + einsatz *4;
falls es sich immer nur im den Einsatz zu Begin handelt.

Aber die Angabe "12 4facher Einsatz +1,50 Euro" lese ich wie genauso wie vanny
Vielleicht brauchst du auch eine Zeile
Code:
gewinn = gewinn + (einsatz * 4 + 1.5);
Das könnte dann übrigens auch geschrieben werden als:
Code:
gewinn += (einsatz * 4 + 1.5);

Wie man's auch dreht und wendet:
Du willst lernen, und der Tip ist: Deine Gewinn-berechnung lässt sich nicht intuitiv lesen, dass man daraus die Spielregeln (Angabe) herauslesen könnte.
und ist zumindest gefährlich, wenn du später den AnfangsEinsatz ändern willst.
 

PolterGEEK

Mitglied
OK, sehe ich ein.
Ich werde das dann so ändern, das jede Runde mit 0.5 Euro Einsatz gespielt wird, zusätzlich bekommt man dann das vierfache bzw den entsprechenden Wert seines Einsatzes.
Um das ganze etwas einfacher für alle Beteiligten zu machen, schreibe ich die Regel jetzt noch einmal lesbarer auf.
[Java]
Regeln :
Augenwert: Preis:
2-6 Verlust des Einsatzes.
7-9 +- 0 (Preis = Einsatz)
10 2 Fache des Einsatzes
11 3 Fache des Einsatzes
12 4 Fache des Einsatzes
[/code]


Java:
public class CubeGame {

    public static void main(String[] args) 
    {
        double price    = 0; // Der Gewinn
        double inset   = 0.5; // Einsatz für jede Runde
        
        for (int i = 1; i < 1000; i++)
        {
            int diceOne = (int) (Math.random() * 6 + 1);
            int diceTwo = (int) (Math.random() * 6 + 1);
            int points = diceOne + diceTwo;
            
            switch (points)
            {
                case (7) : case (8) : case (9) :
                    break;
                case (10) :
                    price += inset * 2; // Gewinn = Gewinn + Einsatz * 2 , So war das doch gemeint oder?
                    break;
                case (11) :
                    price += inset * 3;
                    break;
                case (12) :
                    price += inset * 4;
                    break;
                default :
                    price += inset * -1;
                    break;
            }
        }
        System.out.println(price);
    }
}

So ich hoffe ich habe das Richtig verstanden was ihr meintet :)
 
Zuletzt bearbeitet:

AquaBall

Top Contributor
[EDIT] Tja, post-Üerschneidung!
Hast ja eh (fast) dieselbe Variante genommen. Ich lass es trotzdem drin.
(Aber nun hast du einen kleinen Fehler in der Auszahlung, das mag die Bank gar nicht!!!)
Achte auf den kleinen Unterschied bei
Code:
// Pay anyway!

Da würd dann noch die Abfrage reinpassen: Hat er Geld zu bezahlen?, oder zuviel verloren.
[/EDIT]

Java:
public class CubeGame {

    public static void main(String[] args) 
    {
        double price = 0; // Wieviel Startkapital haben wird denn eigentlich?
        double bet = 0.5; 
        
        for (int i = 1; i < 1000; i++)
        {
            price -= bet;  // pay your bet anyway!

            int diceOne = (int) (Math.random() * 6 + 1);
            int diceTwo = (int) (Math.random() * 6 + 1);
            int points = diceOne + diceTwo;
            
            switch (points)
            {
                case (12) :
                    price += bet*4;
                    break;
                case (11) :
                    price += bet*3;
                    break;
                case (10) :
                    price += bet*2;
                    break;
                case (7) : case (8) : case (9) :
                    price += bet*1;
                    break;
                default :
                    price += bet*0;      // no price
                    break;
            }
        }
        System.out.println(price);
    }
}


Aber wenn du gerne "undurchschaubar" programmieren willst (Sollen ja nur Profis verstehen :oops: ) geht's auch so:
(Versuch das zu durchdenken)
Java:
public class CubeGame {

    public static void main(String[] args) 
    {
        double price = 0; 
        double bet = 0.5; 
        
        for (int i = 1; i < 1000; i++)
        {
            int diceOne = (int) (Math.random() * 6 + 1);
            int diceTwo = (int) (Math.random() * 6 + 1);
            switch (diceOne + diceTwo)
            {
                case (12) : price += bet;
                case (11) : price += bet;
                case (10) : price += bet;
                case (7) : case (8) : case (9) : price += bet;
                default: price -= bet;
            }
        }
        System.out.println(price);
    }
}
 
Zuletzt bearbeitet:

PolterGEEK

Mitglied
Grundsätzlich geht es bei der Aufgabe darum zu schauen, ob man über 1000 Runden am Ende Gewinn macht oder nicht, daher gab es in der Aufgabe keine Details zu Startkapital und ob man ins Minus gehen darf oder nicht. Allerdings wäre das eine nette Idee für eine Übung, ein Würfelspiel, wo man halt wirklich Spielen kann ^^.

Ich bedanke mich schon mal sehr für die konstruktive Kritik (Sehr lobenswert, habe das schon ganz anders erlebt :( )

Gruß
Der PolterGEEK
 
H

hüteüberhüte

Gast
Zeile 9 und 10: Erst 6.0 (double) multiplizieren, dann casten, dann 1 (int) addieren. Ansonsten kann es Gleitkommazahl-bedingte Abweichungen geben:

Java:
int diceOne = (int) (Math.random() * 6.0) + 1;

Ansonsten gut gemacht, man versteht was gemeint ist :)
 
Zuletzt bearbeitet von einem Moderator:

AquaBall

Top Contributor
Wenn's in der Übung "nur um das Ergebnis" gänge,
das ließe sich einfacher erreichen:
Code:
Augen	Häuf.	Wahrsch. Gew.	Zahlg.	Erwartung
2	1	0,028	0	-1	-0,03
3	2	0,056	0	-1	-0,06
4	3	0,083	0	-1	-0,08
5	4	0,111	0	-1	-0,11
6	5	0,139	0	-1	-0,14
7	6	0,167	1	 0	 0,00
8	5	0,139	1	 0	 0,00
9	4	0,111	1	 0	 0,00
10	3	0,083	2	 1	 0,08
11	2	0,056	3	 2	 0,11
12	1	0,028	4	 3	 0,08
		-----			-----
		1,000			-0,14

Bei 1000 Versuchen müsste ca. 1000 x (-0,14) x 50c = 70.- Verlust rauskommen.
Wenn nicht, dann läuft der ZufGen schräg.
 
Zuletzt bearbeitet:

MiMij

Bekanntes Mitglied
Mit
Java:
for (int i = 1; i < 1000; i++)

bekommt man aber keine 1000 zusammen ;)
Entweder bei 0 anfangen oder bis i<=1000 laufen lassen :)
 

AquaBall

Top Contributor
[OT]
Mensch bist du empfindlich. Du hast ohne Brüche gerechnet und dann auch noch eine riesige, nicht benötigte Tabelle erstellt. Aber wenn du dir die Arbeit machen willst :bahnhof:
Na,na. Ich halt schon was aus.
Ich dachte nur, dass du der Meinung bist ich hätte etwas anderes gerechnet.
Logisch sind bei mir auch alles 1/6-Brüche, wie käme ich sonst auf das richtige Ergebnis, aber in Excel werden die halt gleich dezimal dargestellt.

Und letztlich geht es ihm ja um den konkreten Zahlenwert, also müsste man immer noch 1000 x 0,5 x -5/36 rechen.
Ich kenn niemanden, der das im Kopf rechnet.
Das rechne ich halt in Excel, was bei mir soundso rund um die Uhr läuft, statt mit Taschenrechner.

Damit hab ich jede Rechnung auch gleich dokumentiert.

In der Tabelle sieht er halt zusätzlich, dass,
wenn die "6" auch noch ausgezahlt würde, dass es dann ein "faires" Null-Summen-Spiel wäre,
und könnte das auch noch schnell testen.
[/OT]
Thema erledigt.
 
Zuletzt bearbeitet:

PolterGEEK

Mitglied
Da sich das ganze ja jetzt soweit geklärt hat, habe ich das hier mal als geklärt markiert :)
Ich bedanke mich für die Hilfen und werde erst mal fleißig weiterlernen.

Gruß
Der PolterGEEK
 
K

Kaleidoskp

Gast
-0.14 ist nicht genau -5/36. Je mehr Versuche man macht, umso deutlicher wird der Unterschied. Insofern bin ich hüteüberhüte dankbar, dass er das richtige Ergebnis gepostet hat. :)
 
H

hüteüberhüte

Gast
@AquaBall: Ok, dass du ohnedies mit Excel beschäftigt warst, konnte ich ja nicht wissen. Dann fühle dich nicht von dem Betrag betroffen. Thema [Erledigt] :)
 

AquaBall

Top Contributor
Ok, und du hast recht damit, dass die Angabe -0.14 (oder auch -0.139) nicht "genug hilfreich" ist, sondern -5/36 (zumindest ergänzend) die geeignetere Angabe gewesen wäre.
Thema [Erledigt] :)[/QUOTE]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B OOP was heißt objektorientiertes Programmieren (fragt ein absoluter Anfänger) Java Basics - Anfänger-Themen 17
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
M Java Programmierung Aufgabe Anfänger Java Basics - Anfänger-Themen 1
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
R Anfänger: Ausgabe kommt minus raus? Java Basics - Anfänger-Themen 6
D Zahlentabelle Anfänger braucht Hilfe Java Basics - Anfänger-Themen 1
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
T Übungsbuch für Anfänger Java Basics - Anfänger-Themen 3
H Threads Anfänger Java Basics - Anfänger-Themen 17
C Erste Schritte Anfänger Verständnisfrage zum Compiler Java Basics - Anfänger-Themen 31
J Anfänger, Fehler; "Der Hund liegt begraben" Java Basics - Anfänger-Themen 3
K Buchstabenzähler Java (Anfänger) Java Basics - Anfänger-Themen 35
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
U anfänger braucht hilfe . wir konnten die aufgaben nicht beantworten Java Basics - Anfänger-Themen 5
ehmo würfelspiel programmieren anfänger Java Basics - Anfänger-Themen 1
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
L Anfänger braucht Hilfe - Stecke beim Lernen fest Java Basics - Anfänger-Themen 10
A Scanner Befehl Java Anfänger Java Basics - Anfänger-Themen 8
_Zabuza_ Erste Schritte Wie am effektivsten Java lernen als Anfänger? Java Basics - Anfänger-Themen 12
T Roulette für Anfänger Java Basics - Anfänger-Themen 7
T Java Anfänger mit konkreten Fragen Java Basics - Anfänger-Themen 2
K Java Anfänger Java Basics - Anfänger-Themen 5
F Hilfe für einen Anfänger! Java Basics - Anfänger-Themen 4
S Ein Java Anfänger braucht Hilfe Java Basics - Anfänger-Themen 5
P Übungsaufgaben für Anfänger? Java Basics - Anfänger-Themen 2
Z Unklarheit bei Übungsaufgabe [Anfänger] Java Basics - Anfänger-Themen 22
J Lesen und schreiben in eine Datei(Anfänger- Dateizugriffe) Java Basics - Anfänger-Themen 3
O Anfänger, Verständnisfrage Java Basics - Anfänger-Themen 3
CT9288 Mini Anfänger-Problem mit loops, statements und ; Java Basics - Anfänger-Themen 4
F Hilfe, bin Anfänger! Java Basics - Anfänger-Themen 4
R Erste Schritte Materialien für Java-Anfänger Java Basics - Anfänger-Themen 7
Koookie Kleines Frage - Antwort Programm (Anfänger) Java Basics - Anfänger-Themen 5
F Studium aufgabe ...Anfänger sucht hilfe :D Java Basics - Anfänger-Themen 24
F Anfänger braucht Hilfe :) Java Basics - Anfänger-Themen 3
F Abrechnungsprogramm erstellen Student (Anfänger) Java Basics - Anfänger-Themen 2
D Anfänger braucht Hilfe Java Basics - Anfänger-Themen 2
J Musikplayer zu schwer für Anfänger? Java Basics - Anfänger-Themen 3
F Wieso wird dieser Befehl nicht ausgeführt? (Anfänger) Java Basics - Anfänger-Themen 2
V Erste Schritte Anfänger: Ausführen eines Java-Programms Java Basics - Anfänger-Themen 5
Textsurfer Methoden Anfänger * Java Basics - Anfänger-Themen 5
G Ein paar Anfänger Fragen zu StdDraw Java Basics - Anfänger-Themen 4
J Anfänger: ActionListener und ProcessBuilder machen Probleme Java Basics - Anfänger-Themen 6
C verwirrter Anfänger Java Basics - Anfänger-Themen 6
L Verzinsungsprogramm (Java-Anfänger) Java Basics - Anfänger-Themen 3
T Datentypen enum static Chaos (blutiger anfänger) Java Basics - Anfänger-Themen 5
I if/else Statements Java Anfänger Java Basics - Anfänger-Themen 14
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
H Schleifen (anfänger) Java Basics - Anfänger-Themen 13
H Methoden Bluej Anfänger Java Basics - Anfänger-Themen 13
M Erste Schritte Einfache Aufzugssteuerung programmieren - Anfänger Java Basics - Anfänger-Themen 2
D Anfänger-Problem mit dem HalloWelt-Programm Java Basics - Anfänger-Themen 5
S Compiler-Fehler Anfänger sucht Hilfe. Fehler beim Compilieren Java Basics - Anfänger-Themen 6
V Erste Schritte Java-Anfänger braucht Hilfe bei Arrays Java Basics - Anfänger-Themen 19
V Array mit Zufallszahlen - Anfänger - Hilfe Java Basics - Anfänger-Themen 12
J Anfänger hat Problem mit seinen Beet Java Basics - Anfänger-Themen 12
D Compiler-Fehler Anfänger Fehlermeldung Java Basics - Anfänger-Themen 3
das_leon if als Auswahl (Anfänger) Java Basics - Anfänger-Themen 1
N Anfänger Problem Java Basics - Anfänger-Themen 4
GoodGuy [Anfänger] Kann mal wer drüber gucken? Java Basics - Anfänger-Themen 3
R Erste Schritte Anfänger Probleme bei AnimationDrawable Java Basics - Anfänger-Themen 0
J Kleiner Taschenrechner! Anfänger braucht Hilfe :( Java Basics - Anfänger-Themen 2
C Taxiwarteschlange - Anfänger Java Basics - Anfänger-Themen 2
J Fehlermeldung : cannot invoke char(at) int on the primitive type int --- Anfänger Java Basics - Anfänger-Themen 5
I Java, Application, Eclipse (Anfänger) Java Basics - Anfänger-Themen 1
M Java Anfänger - Video Tutorial Reihe (DEUTSCH) Java Basics - Anfänger-Themen 11
C Anfänger: Array + Klasse Java Basics - Anfänger-Themen 5
S OOP Uhrenanzeige programmieren, Achtung Anfänger! Java Basics - Anfänger-Themen 9
B Compiler-Fehler Ein Java-Eclipse-Anfänger geht auf Reisen... Java Basics - Anfänger-Themen 10
A 2 kurze Anfänger fragen Java Basics - Anfänger-Themen 6
I totaler Anfänger braucht Hilfe Java Basics - Anfänger-Themen 8
I Erste Schritte Bücher für Jungedliche[Anfänger] Java Basics - Anfänger-Themen 20
T Hallo anfänger braucht Hilfe :D Java Basics - Anfänger-Themen 7
C Anfänger Anfänger Fragen Java Basics - Anfänger-Themen 8
A Anfänger Taschenrechner Frage Java Basics - Anfänger-Themen 14
D error: Class names, >>>HILFE, anfänger<<< Java Basics - Anfänger-Themen 4
J Hilfe für Anfänger Java Basics - Anfänger-Themen 8
E OOP Methode an andere Methode übergeben / OOP Anfänger Java Basics - Anfänger-Themen 4
Farbenfroh Exceptions Anfänger - Finde Fehler nicht Java Basics - Anfänger-Themen 7
H MergeSort (für Anfänger ) Java Basics - Anfänger-Themen 9
X Projekt Java Anfänger Java Basics - Anfänger-Themen 28
C Fehlersuche Adressbuch *Anfänger* Java Basics - Anfänger-Themen 5
C Anfänger braucht Hilfe bei Schularbeit Java Basics - Anfänger-Themen 3
J Erste Schritte Hilfe bei absolutem Anfänger-Projekt Java Basics - Anfänger-Themen 4
F Anfänger braucht Hilfe Java Basics - Anfänger-Themen 24
A Erste Schritte Übungen für Anfänger Java Basics - Anfänger-Themen 31
M Sieb des Eratosthenes für Anfänger Java Basics - Anfänger-Themen 10
M Tipps für einen Java-Anfänger Java Basics - Anfänger-Themen 5
S Anfänger Aufgaben Java Basics - Anfänger-Themen 6
G Anfänger-Errors und Fragen Java Basics - Anfänger-Themen 22
S Java für Anfänger: Probleme mit read() Java Basics - Anfänger-Themen 20
C Input/Output Anfänger Array-Verständnis Frage Java Basics - Anfänger-Themen 7
W Erste Schritte OOP-Lektüre für Anfänger/Umsteiger von Clipper auf Java Java Basics - Anfänger-Themen 6
J Welches Java-Videotutorial für Anfänger empfehlenswert? Java Basics - Anfänger-Themen 7
F Java-Anfänger, brauche Hilfe Java Basics - Anfänger-Themen 3
F Java-Anfänger, brauche Hilfe Java Basics - Anfänger-Themen 2
P Java anfänger tutorial gesucht Java Basics - Anfänger-Themen 12
P Viereck mit Sterne - Anfänger bittet um Kritik und Anregung Java Basics - Anfänger-Themen 11
B Java für Anfänger Java Basics - Anfänger-Themen 7
T Bin Anfänger ... das Thema auch ? Java Basics - Anfänger-Themen 10
K Erste Schritte quelltext hilfe anfänger Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben