Theoriefrage (variater wertevergleich)

wyldstyle

Aktives Mitglied
Hallo da draußen, ich hätte mal eine Logikfrage. Ich arbeite an einer (naiven) Auswertung für ein Pokerspiel und hänge grad an 2pair/fullhouse obwohl ich denke, dass es nicht schwer sein kann, fällt mir einfach nichts halbwegs gescheites ein.

Ich arbeite folgendermaßen: 5 Arrays.
1. Ein Array was NUR die Werte der Karten enthält 2-14 für karten 2-ass
2. 4 Arrays in denen jeweils alle Karten von einer Farbe liegen, absteigend sortiert.

Beispiel Fullhouse: Hier arbeite ich nur mit der ersten Liste
Ich mache für jeden Wert einen zähler und iteriere durch mein array und inkrementiere beim treffer.
-> am ende stehen im zähler wie oft die karten vorkamen.

Jetzt kommt der trickypart: wie vergleiche ich jeden zähler der 3 ist mit allen anderen ob sie 2 sind halbwegs effektiv ohne jede kombination duchzugehen?

Ich poste eifnach mal meinen Code hier rein, denke dann wird das sofort klar was ich möchte (diese Abfrage ist für ein Pärchen):

Code:
short zaehler2 = 0;
		short zaehler3 = 0;
		short zaehler4 = 0;
		short zaehler5 = 0;
		short zaehler6 = 0;
		short zaehler7 = 0;
		short zaehler8 = 0;
		short zaehler9 = 0;
		short zaehler10 = 0;
		short zaehler11 = 0;
		short zaehler12 = 0;
		short zaehler13 = 0;
		short zaehler14 = 0;
		
		for (int i=0;i<kartenNachNummern.length;i++){
			switch(kartenNachNummern[i]){
			case 2: zaehler2++;break;
			case 3: zaehler3++;break;
			case 4: zaehler4++;break;
			case 5: zaehler5++;break;
			case 6: zaehler6++;break;
			case 7: zaehler7++;break;
			case 8: zaehler8++;break;
			case 9: zaehler9++;break;
			case 10: zaehler10++;break;
			case 11: zaehler11++;break;
			case 12: zaehler12++;break;
			case 13: zaehler13++;break;
			case 14: zaehler14++;break;
			default: System.out.println("FEHLER in isOnePair");
			}
		} 
		if (zaehler2== 2){
			onepair = true;
			onepair2 = true;
		}
		if (zaehler3== 2){
			onepair = true;
			onepair3 = true;
		}
		if (zaehler4== 2){
			onepair = true;
			onepair4 = true;
		}
		if (zaehler5== 2){
			onepair = true;
			onepair5 = true;
		}
		if (zaehler6== 2){
			onepair = true;
			onepair6 = true;
		}
		if (zaehler7== 2){
			onepair = true;
			onepair7 = true;
		}
		if (zaehler8== 2){
			onepair = true;
			onepair8 = true;
		}
		if (zaehler9== 2){
			onepair = true;
			onepair9 = true;
		}
		if (zaehler10== 2){
			onepair = true;
			onepair10 = true;
		}
		if (zaehler11== 2){
			onepair = true;
			onepairj = true;
		}
		if (zaehler12== 2){
			onepair = true;
			onepaird = true;
		}
		if (zaehler13== 2){
			onepair = true;
			onepairk = true;
		}
		if (zaehler14== 2){
			onepair = true;
			onepairass = true;
		}


Versteht ihr die Frage?

grüße, wyldstyle
 

Marco13

Top Contributor
Wenn das für ein Pärchen ist, ist es glaub' ich gut, dass du den Code für Full House nicht gepostet hast :D

Die Repräsentation sieht krampfig aus. 5 Arrays?! :autsch: Eine ... IMHO nahe liegende Möglichkeit, die Karten zu beschreiben wäre als eigene Klasse, und zwar mit Wert (int 2..10, 11 (Bube)...14 (Ass)) und einer Farbe (int oder enum).

Damit könnte man die Methoden relativ straightforward implementieren...
Code:
private static boolean onePair(Card cards[])
{
    for (int i=1; i<cards.length; i++)
    {
        if (cards[i].getValue() == cards[0].getValue()) return true;
    }
    return false;
}

Hm.
 

Ähnliche Java Themen

Neue Themen


Oben