Java Full House beim Poker

guy47

Lt. Junior Grade
Registriert
Juni 2008
Beiträge
309
Guten Tag,
habe ein Problem bei einer Aufgabe in Java und hoffe, dass ich hier von erfahrenen Java Nutzern Hilfe bekommen kann.
Es geht um ein Programm, dass die Wahrscheinlichkeit eines Full House (Drilling und Paar) beim 5 Karten Poker, direkt nach dem Karten geben berechnet.
Ich weiß nicht genau wie ich weitermachen soll oder ob ich das Problem zu kompliziert angehe.
Ein Problem an dem ich gerade hänge ist, dass die Ausgabe bei einem Paar oftmals flasch ist.
Ich weiß nicht genau wie ich sagen kann, dass er die Karten die im Drilling "verbraucht" sind, nicht mehr beachten soll.

Hier ist das Programm:

Code:
public class Poker{

	public static void main(String[] args) {
	
		int karten[] = new int[52];
		
		for (int i = 0; i < 5; i++){ // 5 Karten werden gezogen
			 karten[i] = 1+(int) Math.floor(14*Math.random());
		}
		System.out.println("Du hast "+karten[0]+" "+karten[1]+" "+karten[2]+" "+karten[3]+" "+karten[4]+" gezogen");
		
		
	
		
			int i = 1;		//Deklaration der (Hilfs-)Variablen
			int z = 1;
			int y = 1;
			int x = 1;
			int w = 1;
			
			
		
			do{									//bei jedem "do" werden die Karten, beginnend mit Karte 0, mit der nächsten verglichen
				if(karten[0] == karten[i]){
					
					z = z + 1;
					i = i + 1;
				}
					else{
				
						i = i + 1;
					
					}
			}while(i <= 4);
		
				
			
		int j = 2;
		
		
			do{
				if(karten[1] == karten[j]){
			
					y = y + 1;				
					j = j + 1;
					}
					else{
					
						j = j + 1;
				
					}
			}while(j <= 4);
			
			
			
		
		int k = 3;
		
		
			do{
					if(karten[2] == karten[k]){
			
						x = x + 1;
						k = k + 1;
					}
					else{
					
						k = k + 1;
				
					}
			}while(k <= 4);
			
			
			
			
		
		if(karten[3] == karten[4]){
			
			w = w + 1;
		}		
		
		
		
		
		
		if (z > 2 && z <= 3 || y > 2 && y <= 3 || x > 2){			//Sollte Karte 0 oder Karte 1 oder Karte 3 mit den anderen übereinstimmen, so gibt es 3 gleiche
			System.out.println("three of a kind");
		}	
			
		if (z == 2 || y == 2 || x == 2 && karten[2] == karten[4] || karten[2] == karten[1] || karten[2] == karten[0]){		//hier bin ich mir unsicher, da ich nicht genau weiß ich ich dem Programm sage, dass er die bereits verglichenen Karten
			System.out.println("two of a kind");																			//weglässt. Ausserdem soll es ja im Fall eines Drillings und eines Päärchens Full House ausgeben und die Wahrscheinlichkeit
		}																													// ausrechnen, wie viele Versuche er dafür benötigt hat.
		
			
	}
}
 
man kann's auch umständlich machen...

Warum machst du dir nicht einfach ein Array für die Häufigkeit und setzt dann jeweils beide Werte der Karten gleichzeitig hoch? Dann hast du für jede Karte einen Wert, wie oft es sie gibt und kannst einfach vergleichen.
Noch was, wozu erstellst du eigentlich so viele Laufvariablen? Eine würde hier doch reichen.

Und welche Wahrscheinlichkeit willst du jetzt berechnen? Die Wahrscheinlichkeit, dass zufällige 5 Karten ein Full-House ergeben, ist ja überall zu finden und berechnet sich als (Anzahl der Full-House-Hände/Anzahl aller Hände). Oder um was genau geht es hier?
 
Deinen Programmcode kann man nicht verstehen. Du solltest dringend andere Variablenbezeichner verwenden. Etwas sprechendes. Mit x, k , j usw. kann niemand etwas anfangen.
Dein Karten ziehen ist auch falsch. Es kann der Wert 14 rauskommen. Es gibt aber nur 13 verschiedene Karten pro Farbe. Außerdem könnte auch 5 mal die gleiche Karte gezogen werden, was auch falsch ist.

Du solltest das Problem erst mal mathemathisch lösen, bevor du dich an den Programmcode ranmachst.
 
Und, klappt es denn jetzt mittlerweile?
 
Zurück
Oben