# Würfelspiel



## paukenpaule (18. Nov 2009)

Moin,

sitze mal wieder an meiner Hausaufgabe (diesmal habe ich früher angefangen, noch 11 Tage zeit, yay! ), und komme nicht weiter.

Ich soll ein kleines Würfelspiel mit folgenden Regeln programmieren:

1. wenn alle drei Würfel die gleichen Augenzahlen haben, aber keine 6en sind => Gewinn 20€ 
2. wenn alle 3 Würfel gerade Augenzahlen haben, aber die Augenzahlen sind nicht gleich => Gewinn 10€ 
3. zwei beliebige Würfel haben gleiche Augenzahl und keine der beiden vorherigen Fälle
ist aufgetreten => Gewinn 6 €
4. keine dieser Fälle => Kein Gewinn

Hier mal der Code bisher:


```
public class Wuerfeln {

	public static void main(String[] args) {
		int zahlw1 = 1;
		int zahlw1m = 6;
		int maxw1=zahlw1m-zahlw1;
		double wuerfel1=Math.random()*maxw1;
		wuerfel1 = Math.round(wuerfel1);
		wuerfel1 +=zahlw1;
	
		int zahlw2 = 1;
		int zahlw2m = 6;
		int maxw2=zahlw2m-zahlw2;
		double wuerfel2=Math.random()*maxw2;
		wuerfel2 = Math.round(wuerfel2);
		wuerfel2 +=zahlw2;

		
		int zahlw3 = 1;
		int zahlw3m = 6;
		int maxw3=zahlw3m-zahlw3;
		double wuerfel3=Math.random()*maxw3;
		wuerfel3 = Math.round(wuerfel3);
		wuerfel3 +=zahlw3;

		
		if ((wuerfel1 == wuerfel2) && (wuerfel2 == wuerfel3))
			if (wuerfel1 != 6)
				System.out.println("Gewinn 20 Euro!"+'\t'+wuerfel1+'\t'+ wuerfel2+'\t' + wuerfel3);
			else
				System.out.println("Kein Gewinn!"+'\t'+wuerfel1+'\t'+ wuerfel2+'\t' + wuerfel3);
		else
			if ((wuerfel1 + wuerfel2 + wuerfel3)/2 >= 1 && wuerfel1 != wuerfel2 && wuerfel2 != wuerfel3)
				System.out.println("Gewinn 10 Euro!"+'\t'+wuerfel1+'\t'+ wuerfel2+'\t' + wuerfel3);
			else
				System.out.println("Kein Gewinn!"+'\t'+wuerfel1+'\t'+ wuerfel2+'\t' + wuerfel3);
		if ((wuerfel1 == wuerfel2)||(wuerfel1 == wuerfel3)||(wuerfel2 == wuerfel3))
			if  //platzhalter
			
			
	
	
	
}}[/Java]

Punkt 1: scheint erfüllt zu sein (ausgiebiges testen...).
Punkt 2: hier ist glaube ich ein dicker logikfehler drin was die teilbarkeit durch 2 angeht. hier wäre ein kleiner ansatz fein!
Punkt 3: hier bin ich total ratlos, ob ich überhaupt mit dem "or" zeichen arbeiten kann, und wie ich die nächste Bedingung festlegen kann ( keine der beiden vorherigen Fälle ist aufgetreten)

Zweite Sache ist, wie kriege ich die Kommastellen weg? Sieht nämlich nicht sehr elegant aus!
Ist hier alles i.O. mit den {} Zeichen? Im Script wurde erklärt, dass jede Bedingung mit { anfangen und mit } beendet werden soll? Nur blicke ich schon gar nicht mehr durch wo eine anfängt und wo endet:autsch:

Über kleinere Ansätze wäre ich dankbar. Ich hoffe nicht alles ist totaler bullsh*t, da ich hier knapp 3-4 Stunden dran saß :rtfm:

gruß
```


----------



## Der Müde Joe (18. Nov 2009)

>2. wenn alle 3 Würfel gerade Augenzahlen haben, aber die Augenzahlen sind nicht gleich => Gewinn 10€ 

Das heisst: wenn alle durch 2 Rest 0 haben --> (x % 2 == 0) (Modulo-Operator) UND (&&)  (1 != 2 && 1!= 3 && 2!=3)

>Zweite Sache ist, wie kriege ich die Kommastellen weg?


```
Random random = new Random();
int zahl = random.nextInt(6) + 1; // int zwischen 1 - 6
```


----------



## eRaaaa (18. Nov 2009)

paukenpaule hat gesagt.:


> und wie ich die nächste Bedingung festlegen kann ( keine der beiden vorherigen Fälle ist aufgetreten)


naja, auch einfach z.b. mit else if arbeiten. haste zwischen 1 und 2 doch auch gemacht.



> Zweite Sache ist, wie kriege ich die Kommastellen weg? Sieht nämlich nicht sehr elegant aus!


benutze nicht double sondern int ?! 1 und 6, der wertebereich ändert sich doch auch bei keinem der 3 würfel, wieso also alles dreifach initialisieren ?


```
Random r = new Random();
		int min = 1;
		int max = 6;
		int wuerfel1 = r.nextInt(max)+min;
		int wuerfel2 = r.nextInt(max)+min;
		int wuerfel3 = r.nextInt(max)+min;
		System.out.println(wuerfel1);
		System.out.println(wuerfel2);
		System.out.println(wuerfel3);
```

gruß


----------



## paukenpaule (18. Nov 2009)

Der Müde Joe hat gesagt.:


> >2. wenn alle 3 Würfel gerade Augenzahlen haben, aber die Augenzahlen sind nicht gleich => Gewinn 10€
> 
> Das heisst: wenn alle durch 2 Rest 0 haben --> (x % 2 == 0) (Modulo-Operator) UND (&&)  (1 != 2 && 1!= 3 && 2!=3)
> 
> ...



Also müsste die Zeile bei mir nun so aussehen:

```
if (((wuerfel1)%2 == 0 && (wuerfel2)%2 == 0 && (wuerfel3)%2 == 0) && (wuerfel1 != wuerfel2) && (wuerfel1 != wuerfel3) && (wuerfel2 !=wuerfel3))
	System.out.println("Gewinn 10 Euro!"+'\t'+wuerfel1+'\t'+ wuerfel2+'\t' + wuerfel3);
else
	System.out.println("Kein Gewinn!"+'\t'+wuerfel1+'\t'+ wuerfel2+'\t' + wuerfel3);
```
Oder? Habe es versucht zusammenzufassen damit es übersichtlicher aussieht, da kamen dann aber fehler. Aber es scheint zu funktionieren, zumindest wird ein richtiger Gewinn angezeigt.

@eRaaaa:

so ganz einfach finde ich das gerade irgendwie nicht.
Bin bisher nur soweit, weiß einfach nicht wie ich die beiden anderen Anweisungen ausschließen kann, da er nun bei zwei Gleichen Augenzahlen den 6€ Gewinn anzeigt + Kein Gewinn. Sieht auch irgendwie total verwurschtelt aus mit dem ganzen if/else....

```
import java.util.Random;


public class Wuerfeln {

	public static void main(String[] args) {
		Random r = new Random();
        int min = 1;
        int max = 6;
        int wuerfel1 = r.nextInt(max)+min;
        int wuerfel2 = r.nextInt(max)+min;
        int wuerfel3 = r.nextInt(max)+min;


		
		if ((wuerfel1 == wuerfel2) && (wuerfel2 == wuerfel3))
			if (wuerfel1 != 6)
				System.out.println("Gewinn 20 Euro!"+'\t'+wuerfel1+'\t'+ wuerfel2+'\t' + wuerfel3);
			else
				System.out.println("Kein Gewinn!"+'\t'+wuerfel1+'\t'+ wuerfel2+'\t' + wuerfel3);
		else
			if (((wuerfel1)%2 == 0 && (wuerfel2)%2 == 0 && (wuerfel3)%2 == 0) && (wuerfel1 != wuerfel2) && (wuerfel1 != wuerfel3) && (wuerfel2 !=wuerfel3))
				System.out.println("Gewinn 10 Euro!"+'\t'+wuerfel1+'\t'+ wuerfel2+'\t' + wuerfel3);
			else
				System.out.println("Kein Gewinn!"+'\t'+wuerfel1+'\t'+ wuerfel2+'\t' + wuerfel3);
		
		if ((wuerfel1 == wuerfel2)||(wuerfel1 == wuerfel3)||(wuerfel2 == wuerfel3))
			System.out.println("Gewinn 6 Euro!"+'\t'+wuerfel1+'\t'+ wuerfel2+'\t' + wuerfel3);
		else
			System.out.println("Kein Gewinn!"+'\t'+wuerfel1+'\t'+ wuerfel2+'\t' + wuerfel3);
		
		
}}


}}
```

Werd mich morgen nochmal dransetze, irgendwie klappt seit ner Stunde gar nix mehr:bahnhof:



PS: Gibts da echt keine andere Möglichkeit mit den zufälligen int werten? weil 
	
	
	
	





```
import java.util.Random;
```
 kam in meinem Script bisher nicht vor.

gruß und danke schonmal!


----------



## eRaaaa (18. Nov 2009)

also wenn ich mich jetzt nicht verguckt habe, sieht das doch schon korrekt aus, du musst nur das erste und zweite

```
else
                System.out.println("Kein Gewinn!"+'\t'+wuerfel1+'\t'+ wuerfel2+'\t' + wuerfel3);
```
rauslöschen. (dann solltest du bei der ersten fallunterscheidung, das if (wuerfel1 != 6) mit in die obige if einbauen)
und dann vor dem letzten if... ein else vorsetzen.

```
if ((wuerfel1 == wuerfel2) || (wuerfel1 == wuerfel3)
				|| (wuerfel2 == wuerfel3))
			System.out.println("Gewinn 6 Euro!" + '\t' + wuerfel1 + '\t'
					+ wuerfel2 + '\t' + wuerfel3);
```
da vor dem if ein else.dann sollte das eig. schon gehen wenn ich mich nicht verguckt habe.
kompliziert zu erklären bei den tausend if`s 

also nochmal grober aufbau:

if (bedingungen für fall1)
  gewinn 20
else if (bedingung für fall2)
  gewinn 10
else if(bedingung für fall3)
  gewinn 6
else
  kein gewinn 

zu deiner frage: klar, es ginge auch so wie du vorher hattest, also mit math.random, abe rwie gesagt wird dir da ein double geliefert, was du machen könntest ist, dieses einfach auf ein int zu casten (int)wuerfel1. z.b. bei der ausgabe !


----------



## paukenpaule (18. Nov 2009)

Wow ihr seid echt spitze! Funktioniert nun. Das mit dem else if kannte ich zum Beispiel gar nicht, hätte ich ja noch lange rumprobieren können.
Danke für den Tipp mit dem int casten. Meine Variante sieht zwar DEUTLICH unschöner aus als die 6 Zeilen, aber ich machs lieber mit den Varianten die man im Kurs schon kennt, nachher gibts da noch gemeckere.

Danke nochmal an euch Helfer, schönen abend noch!


----------



## paukenpaule (28. Nov 2009)

Hallo,

ich muss mich leider nochmal zu wort melden 
Da ich es morgen hochladen muss, wollte ich es heute nochmal etwas verschönert schreiben, da es vorschrift ist. Allerdings klappt nun gar nichts mehr, mit der Komplizierten Variante klappt es einwandfrei!
Allerdings weiß ich nicht wo der Fehler ist, anscheinend werden die Augenzahlen der Würfel gar nicht mehr erkannt, es trifft immer nur der allerletzte Fall ein, egal welche Zahlen erscheinen.

Hier mal der hässliche Code wie es klappt:


```
int zahlwuerfel1=1, zahlwuerfel1max=6, zahlwuerfel2=1, zahlwuerfel2max=6, zahlwuerfel3=1, zahlwuerfel3max=6;
int maxwuerfel1=zahlwuerfel1max-zahlwuerfel1, maxwuerfel2=zahlwuerfel2max-zahlwuerfel2, maxwuerfel3=zahlwuerfel3max-zahlwuerfel3;
double wuerfel1 = Math.random()*maxwuerfel1, wuerfel2 = Math.random()*maxwuerfel2, wuerfel3 = Math.random()*maxwuerfel3;
wuerfel1=Math.round(wuerfel1);
wuerfel1+=zahlwuerfel1;
wuerfel2=Math.round(wuerfel2);
wuerfel2+=zahlwuerfel2;
wuerfel3=Math.round(wuerfel3);
wuerfel3+=zahlwuerfel3;

if (((wuerfel1 == wuerfel2) && (wuerfel2 == wuerfel3)) && (wuerfel1 != 6)){
    System.out.println("Gewinn 20 Euro!"+'\n'+"1.Wuerfel:"+" "+(int)wuerfel1+'\n'+"2.Wuerfel:"+" "+(int)wuerfel2+'\n'+"3.Wuerfel:"+" "+(int)wuerfel3);}
else if (((wuerfel1)%2 == 0 && (wuerfel2)%2 == 0 && (wuerfel3)%2 == 0) && (wuerfel1 != wuerfel2) && (wuerfel1 != wuerfel3) && (wuerfel2 !=wuerfel3)){
    System.out.println("Gewinn 10 Euro!"+'\n'+"1.Wuerfel:"+" "+(int)wuerfel1+'\n'+"2.Wuerfel:"+" "+(int)wuerfel2+'\n'+"3.Wuerfel:"+" "+(int)wuerfel3);}
else if (wuerfel1 == wuerfel2 || wuerfel1 == wuerfel3 || wuerfel2 == wuerfel3){
    System.out.println("Gewinn 6 Euro!"+'\n'+"1.Wuerfel:"+" "+(int)wuerfel1+'\n'+"2.Wuerfel:"+" "+(int)wuerfel2+'\n'+"3.Wuerfel:"+" "+(int)wuerfel3);}
else{
    System.out.println("Kein Gewinn!"+'\n'+"1.Wuerfel:"+" "+(int)wuerfel1+'\n'+"2.Wuerfel:"+" "+(int)wuerfel2+'\n'+"3.Wuerfel:"+" "+(int)wuerfel3);
}}}
```

Und so hätte ich es gerne:

```
double wuerfel1=Math.random()*6+1;
double wuerfel2=Math.random()*6+1;
double wuerfel3=Math.random()*6+1;
if (((wuerfel1 == wuerfel2) && (wuerfel2 == wuerfel3)) && (wuerfel1 != 6)){
		System.out.println("Gewinn 20 Euro!"+'\n'+"1.Wuerfel:"+" "+(int)wuerfel1+'\n'+"2.Wuerfel:"+" "+(int)wuerfel2+'\n'+"3.Wuerfel:"+" "+(int)wuerfel3);}
else if (((wuerfel1)%2 == 0 && (wuerfel2)%2 == 0 && (wuerfel3)%2 == 0) && (wuerfel1 != wuerfel2) && (wuerfel1 != wuerfel3) && (wuerfel2 !=wuerfel3)){
		System.out.println("Gewinn 10 Euro!"+'\n'+"1.Wuerfel:"+" "+(int)wuerfel1+'\n'+"2.Wuerfel:"+" "+(int)wuerfel2+'\n'+"3.Wuerfel:"+" "+(int)wuerfel3);}
else if (wuerfel1 == wuerfel2 || wuerfel1 == wuerfel3 || wuerfel2 == wuerfel3){
		System.out.println("Gewinn 6 Euro!"+'\n'+"1.Wuerfel:"+" "+(int)wuerfel1+'\n'+"2.Wuerfel:"+" "+(int)wuerfel2+'\n'+"3.Wuerfel:"+" "+(int)wuerfel3);}
else{
		System.out.println("Kein Gewinn!"+'\n'+"1.Wuerfel:"+" "+(int)wuerfel1+'\n'+"2.Wuerfel:"+" "+(int)wuerfel2+'\n'+"3.Wuerfel:"+" "+(int)wuerfel3);
			
		
}}}
```
Ist ja im Prinzip alles gleich, nur das er die Zahlen 1-6 gar nicht mehr berücksichtigt.
Hoffe da kann mir jemand erklären warum es so ist, wüsste nicht was ich falsche gemacht habe???:L

Gruß!


----------



## eRaaaa (28. Nov 2009)

naja, deine wuefel sind halt double`s. d.h. du hast eig. werte wie z.b. 2,333455 und 2,35555
die sind eben nicht gleich 
(bei der ausgabe hinterher castest du erst auf int)


```
int wuerfel1 = (int)(Math.random() * 6 + 1);
		int wuerfel2 =(int)(Math.random() * 6 + 1);
		int wuerfel3 = (int)(Math.random() * 6 + 1);
```

die tausend casts bei der ausgabe sind nun auch garnicht erfolderlich!


----------



## paukenpaule (29. Nov 2009)

Mh, ich dachte das wäre durch das int casten am ende erledigt. aber ist ja irgendwie auch dumm erst nach den  bedingungen sie auf int zu casten, macht ja wenig sinn 
Danke mal wieder!


----------

