You are not logged in.

  • Login

1

Tuesday, November 17th 2009, 4:16pm

Würfelspiel Mäxchen

Hey leute hab hier mal ein Würfelspiel namens Mäxchen programmiert die regeln sind folgende:

1. Man Würfelt mit 2 Würfeln
2. bei einer 1 und einer 2 hat man ein Mäxchen geworfen dieser Wurf ist 1000 Punkte wert
3. bei gleicher Augenzahl z.B. 3 und 3 ist das ein Pasch und ist 100 * Augezenzahl wert das bedeutet z.B. 3 und 3 = 300 Punkte
4. bei 2 Unterschiedlichen Augenzahlen wirt die größere Augenzahl *10 genommen + die kleinere heißt z.b 2 und 3 = 32

mein programm berechnet nun die Punkte für die jeweiligen Würfe der Code dazu sieht so aus:


Java Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public static void main(String[] args)
{
 
 
	int Augenzahl = Console.readInt("Bitte geben Sie die 1. Würfelzahl ein ");
	int Augenzahl2 = Console.readInt("Bitte geben Sie die 2. Würfelzahl ein");
 
	if((Augenzahl==2) || (Augenzahl==1) && (Augenzahl2==1) || (Augenzahl2==2))
	{
 
		System.out.println("1000");
	}
	{
	if ((Augenzahl==Augenzahl2))
	{
		System.out.println(Augenzahl *100);
	}
	}
	{
	if ((Augenzahl>Augenzahl2))
	{
		System.out.println((10*Augenzahl) + Augenzahl2);
	} 
 
	else
	{	
		System.out.println((10*Augenzahl2) + Augenzahl);
	}
	}
}


So nun ne Kleine Frage :

Wenn man nun die Würfe Eingibt passiert folgendes

Bitte geben Sie die 1. Würfelzahl ein
1
Bitte geben Sie die 2. Würfelzahl ein
2
1000
21 // warum wird Hier die 21 Ausgegeben genau das gleich passiert auch bei einem Pasch sehe ich das richtig und er führt jedes mal die letzte if anweißung aus in der es heißt 10 größte Augenzahl + kleinste ?
// was tu ich dagegen ????

Habe nun mal die letzte If-Anweisung noch etwas erweitert wie folgt :

Source code

1
if ((Augenzahl>Augenzahl2)&& (Augenzahl!=2) || (Augenzahl!=1) && (Augenzahl2!=1) || (Augenzahl2!=2)&&(Augenzahl!=Augenzahl2))


aber trotzdem immer noch das selbe Ergebniss .....
Könnte auch an der Klammersetzung liegen aber da habe ich auch schon alle möglichen und abstrusen formationen probiert ohne Erfolg....:(

This post has been edited 1 times, last edit by "Torben Brodt" (Nov 18th 2009, 9:03am) with the following reason: bitte syntax tags benutzen


2

Tuesday, November 17th 2009, 4:33pm

Quoted

und er führt jedes mal die letzte if anweißung aus in der es heißt 10 größte Augenzahl + kleinste ?
genau so ist es. Auch wenn du einen "treffer" gelandet hast (also z.B. hast du in der ersten if-abfrage herausgefunden, dass es ein Mäxle ist) werden die anderen if abfragen trotzdem noch ausgeführt. Und logischerweise ist bei einem Mäxle die eine Augenzahl größer als die andere.
Am einfachsten kannst du das Problem beheben, wenn du statt einzelnen if-Abfragen ein großes
if - else if - else if - else if - else Konstrukt benutzt. In dem Falle führt er die anderen if-Abfragen dann nicht mehr aus, sobald er ein "passendes" gefunden hat.
Ein Beispiel gibts hier (letztes Beispiel)

3

Tuesday, November 17th 2009, 5:04pm

Die erste if-Bedingung ist auch noch nicht richtig, denn so gelten auch 1er-Paschs und 2er-Paschs als Mäxle.

4

Tuesday, November 17th 2009, 5:08pm

Danke für eure Hilfe !

Habe nun die Fehler verbessert jetzt funzt alles und sieht so aus :

Java Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static void main(String[] args)
{
 
 
	int Augenzahl = Console.readInt("Bitte geben Sie die 1. Würfelzahl ein ");
	int Augenzahl2 = Console.readInt("Bitte geben Sie die 2. Würfelzahl ein");
 
	if((Augenzahl==2) || (Augenzahl==1) ^ (Augenzahl2==1) || (Augenzahl2==2)) // Statt logisches && und hier XOR
	{	
		System.out.println("1000");
	}
	else if ((Augenzahl==Augenzahl2))
	{
		System.out.println(Augenzahl *100);
	}
	else if ((Augenzahl>Augenzahl2))
	{
		System.out.println((10*Augenzahl) + Augenzahl2);
	} 
	else if ((Augenzahl2 > Augenzahl))
	{	
		System.out.println((10*Augenzahl2) + Augenzahl);
	}
}

5

Tuesday, November 17th 2009, 5:18pm

Bist du ganz sicher, dass die erste if-Bedingung so richtig ist?

Ich hatte eher an sowas gedacht:

Source code

1
2
3
if ((Augenzahl == 1 && Augenzahl2 == 2) || (Augenzahl == 2 && Augenzahl2 == 1)) {
    System.out.println("1000");
}

6

Tuesday, November 17th 2009, 5:36pm

oder ganz einfach

Java Quellcode

1
if ((Augenzahl + Augenzahl2) == 3)

;)

7

Tuesday, November 17th 2009, 5:58pm

Das mit der 3 hätte ich auch vorgeschlagen, das klappt aber nur "zufällig" (weil es sich um die beiden kleinsten aufeinanderfolgenden Zahlen handelt). Generell kann man sich aber das || mit Math.min() & Math.max() sparen, über Sinnhaftigkeit lässt sich aber streiten.

8

Tuesday, November 17th 2009, 6:42pm

@Rondrer:
Das ist ja echt pfiffig. Schade, dass mir das nicht eingefallen ist. :)

9

Friday, November 20th 2009, 2:57pm

@umt danke für den hinweiß aber glaube es passt meine version und deine denn funktioniert ja beides irgenwie oder ist das zufall ? .....
@ronder jo die idee mit der 3 ist echt pfiffig .....;)

Similar threads

Social bookmarks