Arrays prüfen und über if Bedingung ausgeben

Jura2k5

Mitglied
Moin,
erstmal zu sagen : Super Forum! Habt mir schon viel geholfen nun muss ich jedoch was fragen.
Bin dabei in einem Pokerspiel die Ränge zu ermittel.
Sprich Straight Flush usw.

Ich bekomme ein zufälliges Deck über ein Array ! (main Methode)
Java:
	public static void main(String[] args) {
		
		Deck stapel = new Deck();
		Card[] karte = new Card[7];
		
		for (int i = 0; i < karte.length; i++) {
			karte[i] = stapel.deal();
		}
		ausgabeDerGespieltenKarten(karte);
		sortierenNachRang(karte);
		findRangs(karte);


Hier sind die Karten nach dem rang ermittelbar sprich . TWO,THREE, ... KING, ACE
Ich habe jetzt versuch über eine für und if schleife einen Straight zu ermittel wie folgt!
Java:
	public static void findRangs(Card[] karte) {
		for(int i=0; i<karte.length; i++){	
if (karte[i].getRank().equals(ACE) & karte[i].getRank().equals(KING) & karte[i].getRank().equals(QUEEN) & karte[i].getRank().equals(JACK) & karte[i].getRank().equals(TEN)){
	
 System.out.println("Straight_Flush AKQJT");		  
			  }


Hierbei gibt er mir jedoch keine Ausgabe über die gefundenen Straßen.
Ich vermute es liegt an dem Operator : & / && (haben beide nicht zum erfolg geführt)
Bzw das ich evtl etwas mit dem Index falsch mache!
Ich habe pro Deck immer 7 Karten.
Habe ich evtl etwas mit der For schelife falsch gemacht!
Ich möchte das er über den Index die Straßen finden mit.getRank().equals().
Wenn ich nur nach einem element suche klappt die ausgabe problemlos.
Könntet ihr mir evtl helfen?
 
Zuletzt bearbeitet:

Volvagia

Top Contributor
Du prüfst ja jeden Schleifendurchgang, ob die jeweilige Karte jeden dieser Ränge hat. Die müsstest prüfen ob jeder dieser Ränge bei den Cards jeweils 1x vor gekommen ist.

Sehr einfach wäre das vielleicht mit einen HashSet in dem du bereits gezogene Ränge speicherst.
 

Jura2k5

Mitglied
Das Problem ist ich hatte noch keine HashSeds in der Uni und das wird den Prof nicht freuen wenn ich die nutze =)
Gibt es nicht eine möglichkeit das ich in der SChleife das komplette Array durchlaufe und alle gefundenen elemente mit meiner equals Methode abgleiche?
 
N

nillehammer

Gast
- Wenn du hoch oder runteriterierst, dann muss das Array sortiert sein, sonst findest Du die Straße nicht
- es macht keinen Sinn, alle Bedingungen für das selbe Element zu prüfen (karte). Da Du denselben index in allen Bedingungen verwendest, kann das nie wahr werden.
- Du wolltest sicher '&&' (logisches UND) und nicht '&' (binäre UND-Verknüpfung) verwenden.
Dann bist Du zwar noch nicht fertig...
 
T

TryToHelp

Gast
...
Java:
if (karte[i].getRank().equals(ACE) & karte[i].getRank().equals(KING) & karte[i].getRank().equals(QUEEN) & karte[i].getRank().equals(JACK) & karte[i].getRank().equals(TEN)){
...
zum einen müsste es wenn dann
Code:
&&
heißen, aber vorallem testest du, ob eine Karte das Ass und der König und die Dame und der Bube und die 10 ost, jedoch ist eine Karte für gewöhnlich nur genau eins davon.

Also ich würde dein Deck erst sortieren und dann kannst du so schauen ob es passt

Java:
if (karte[0].getRank().equals(ACE) && karte[1].getRank().equals(KING) && karte[2].getRank().equals(QUEEN) && karte[3].getRank().equals(JACK) && karte[4].getRank().equals(TEN)){

[EDIT]Mhh zu langsam[/EDIT]
 

Jura2k5

Mitglied
Ich hab auch einen Sort.alg. "geschrieben"

Java:
	public static void ausgabeDerGespieltenKarten(Card[] karte) {
public static void sortierenNachRang(Card[] karte) {
		Arrays.sort(karte, Collections.reverseOrder()); 
			for (int i = 0; i < karte.length; i++) {
					System.out.println(karte[i].getRank().value());	
		Card.printCardArray(karte);
				}
 
N

nillehammer

Gast
Ich hab auch einen Sort.alg. "geschrieben"
Ok, unter der Voraussetzung, dass die Sortierung tatsächlich die Karte mit dem größten Rank an den Anfang stellt, ist es eigentlich relativ einfach ohne Schleife zu lösen:
Java:
boolean isStraightFlush = karte[0].getRank().equals(ACE) && karte[1].getRank().equals(KING) && ...
 
Zuletzt bearbeitet von einem Moderator:
T

TryToHelp

Gast
...
Java:
if (karte[[B]6[/B]].getRank().equals(ACE) && karte[[B]0[/B]].getRank().equals(KING) && karte[[B]1[/B]].getRank().equals(QUEEN) && karte[[B]2[/B]].getRank().equals(JACK) && karte[[B]3[/B]].getRank().equals(TEN)){
...
Wenn ich es richtig gesehen habe, ist deine sortierung dann so ;-) da dein Ass den niedrigsten rang hat ;-)
[EDIT]Ja scheint so :-([/EDIT]
 

Jura2k5

Mitglied
Also ich hab den Quellcode mal angepasst so dass ich nach dem index prüfe sprich [0] dann [1] usw...

Java:
			  if (karte[0].getRank().equals(KING) && karte[1].getRank().equals(QUEEN) && karte[2].getRank().equals(JACK) && karte[3].getRank().equals(TEN) && karte[4].getRank().equals(NINE)){
				  System.out.println("Straight_Flush KQJT9");		  
			  }

Damit habe ich nun auch einen Flush ermitteln können, jedoch frag ich mich wie es denn aussieht wenn ich im
Der Index wird bei mir so aufgebaut über die Arrays.sort.Collections Methode!
Index[0] 14(ass)
Index[1]14(ass)
Index[2]13(könig)
Index[3]12(dame)
Index[4]11(dame)
Index[5]10(bube)
Index[6]9(10)

stehen habe ... ( Das Deck hat ja 7 Karten)

Mit der oben genannten Methode prüfe ich ja nur auf einen Flush wenn keine Karten doppelt vorkommen ! Sehe ich doch richtig oder ?
Wie kann ich dieses Problem umgehen ?
 
N

nillehammer

Gast
Mit der oben genannten Methode prüfe ich ja nur auf einen Flush wenn keine Karten doppelt vorkommen ! Sehe ich doch richtig oder ?
Wie kann ich dieses Problem umgehen ?
Das ist jetzt eine Frage nach dem Alghoritmus. Dazu zwei Ideen:
- Prüfe nicht die absteigenden Indizes, sondern schreibe eine contains-Methode, mit der du nach und nach prüfst, ob alle Ranks enthalten sind
- Oder bleib der dem absteigen über die Indizes und baue ein, dass bei gleichem Rank die nächste Karte geprüft wird, sofern noch genügend übrig, um eine Straße zu bekommen. (Ok, dann wird's wohl doch was mit Schleife...)
 

Jura2k5

Mitglied
Was haltet irh davon ?
Ich setzte die doppelten Elemente auf 0. Diese werden durch den Suchalgo. nach unten plaziert auf die letzten Indexwerte!
Wenn die Zahl drei oder vierfach vorkommte wird meine Bedinung nicht erfüllt und es sollte immer funktionieren mit der Straße

Java:
	   public static void eliminate(Card[]karte) {
	        for (int i = 0; i < karte.length; i++) { 
	            for (int j = i + 1; j < karte.length; j++) {   
	                if (karte[i] == karte[j]) {
	                    karte[j] = null;

	                }
	            } 
	                    System.out.println(karte[i].getRank());
	        } 
	    }

Leider liefert mir dieser Algorithmus nicht die arrays als 0 ? Was mach ich nun wieder falsch ?
 
Zuletzt bearbeitet:

bobbsen

Mitglied
Hab den Thread jetzt nur überflogen, aber bau dir doch ein int-Array für die möglichen Werte der Karten, lauf durch deine 7 Karten durch, zähle die Werte der Karten in dem int-array.

Dann kannst du dein Array prüfen, ob Ass, König, Dame und so weiter jeweils mindestens 1x vorkamen. Ausserdem kannst du Paare usw. auch schnell erkennen. Nur die Farben gehen bei dieser Ansicht verloren.

HTH, Bobbsen
 

Jura2k5

Mitglied
Ich muss leider sagen das ich das nicht so gewuppt bekomme die schon vorhandenen arrays zu streichen und die dann zu verschieben in ihrer rheienfolge!
Java:
			  if (karte[0].getRank().equals(ACE) && karte[1].getRank().equals(KING) && karte[2].getRank().equals(QUEEN) && karte[3].getRank().equals(JACK) && karte[4].getRank().equals(TEN)){
				  System.out.println("Straight_Flush AKQJT");		  
			  }
			  if (karte[0].getRank().equals(KING) && karte[1].getRank().equals(QUEEN) && karte[2].getRank().equals(JACK) && karte[3].getRank().equals(TEN) && karte[4].getRank().equals(NINE)){
				  System.out.println("Straight_Flush KQJT9");		  
			  }
			  if (karte[0].getRank().equals(QUEEN) && karte[1].getRank().equals(JACK) && karte[2].getRank().equals(TEN) && karte[3].getRank().equals(NINE) && karte[4].getRank().equals(EIGHT)){
				  System.out.println("Straight_Flush QJT98");		  
			  }
			  if (karte[0].getRank().equals(JACK) && karte[1].getRank().equals(TEN) && karte[2].getRank().equals(NINE) && karte[3].getRank().equals(EIGHT) && karte[4].getRank().equals(SEVEN)){
				  System.out.println("Straight_Flush JT987");		  
			  }
			  if (karte[0].getRank().equals(TEN) && karte[1].getRank().equals(NINE) && karte[2].getRank().equals(EIGHT) && karte[3].getRank().equals(SEVEN) && karte[4].getRank().equals(SIX)){
				  System.out.println("Straight_Flush T9876");		  
			  }
			  if (karte[0].getRank().equals(NINE) && karte[1].getRank().equals(EIGHT) && karte[2].getRank().equals(SEVEN) && karte[3].getRank().equals(SIX) && karte[4].getRank().equals(FIVE)){
				  System.out.println("Straight_Flush 98765");		  
			  }
			  if (karte[0].getRank().equals(EIGHT) && karte[1].getRank().equals(SEVEN) && karte[2].getRank().equals(SIX) && karte[3].getRank().equals(FIVE) && karte[4].getRank().equals(FOUR)){
				  System.out.println("Straight_Flush 87654");		  
			  }
			  if (karte[0].getRank().equals(SEVEN) && karte[1].getRank().equals(SIX) && karte[2].getRank().equals(FIVE) && karte[3].getRank().equals(FOUR) && karte[4].getRank().equals(THREE)){
				  System.out.println("Straight_Flush 76543");		  
			  }
			  if (karte[0].getRank().equals(SIX) && karte[1].getRank().equals(FIVE) && karte[2].getRank().equals(FOUR) && karte[3].getRank().equals(THREE) && karte[4].getRank().equals(TWO)){
				  System.out.println("Straight_Flush 65432");		  
			  }
			  if (karte[0].getRank().equals(ACE) && karte[1].getRank().equals(FIVE) && karte[i].getRank().equals(FOUR) && karte[3].getRank().equals(THREE) && karte[4].getRank().equals(TWO)){
				  System.out.println("Straight_Flush 5432A It is a Wheel");		  
			  }

Könntet ihr mir evtl bisschen helfen wie ich das schaffe das in meinem Array die doppelten Positionen gestrichen werden.
Ich hab schon versuch ein neues arrays zu erstellen und dann über eine for if schleife nur die nicht doppelten werte zu übernehmen, leider klappt es nicht!
 

bobbsen

Mitglied
geht wahrscheinlich noch besser, aber hab grad noch anderes zu tun:

Java:
public class Test {
	static enum Value {
		ACE,
		KING,  
		QUEEN, 
		JACK,
		TEN,   
		NINE,  
		EIGTH, 
		SEVEN, 
		SIX,   
		FIVE,  
		FOUR, 
		THREE,
		TWO  
	}
	
	public static void main(String[] args) {
		Value[] cards = {Value.ACE, Value.KING, Value.KING, Value.QUEEN, Value.JACK, Value.NINE, Value.TEN};
	
		p(cards);		
	}
	
	private static void p(Value[] cards) {
		// Array zum Zählen
		int[] a = new int[Value.values().length]; 
		
		// Karten zählen
		for (Value v: cards) {
			a[v.ordinal()]++;
		}
		
		// Ergebnis ausgeben
		for (Value v: Value.values()) {
			System.out.printf("%s - %d\n", v, a[v.ordinal()]);
		}
		
		// Aufeinander folgende 5 Karten finden
		int start = 0;
		int count = 0;
		for(int i = Value.ACE.ordinal(); i <= Value.TWO.ordinal(); ++i) {
			if (a[i] > 0) {
				count++;
				if (count == 1) {
					start = i;
				} else if (count >= 5) {
					break;
				}
			} else {
				count = 0;
			}
		}
		
		// Wenn gefunden: ausgeben
		if (count >= 5) {
			System.out.println("Straight Flush: ");
			for (int i = 0; i < 5; ++i) {
				System.out.println(Value.values()[start + i]);
			}
		} else {
			System.out.println("Kein Straight Flush gefunden, was anderes suchen ;)");
		}
	}
}

HTH, bobbsen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
E 2D Arrays auf Ungleichheit prüfen! Java Basics - Anfänger-Themen 5
J Prüfen ob Arrays nur mit einem Wert belegt sind Java Basics - Anfänger-Themen 3
M Konstruktor auf null prüfen, Arrays Java Basics - Anfänger-Themen 9
D prüfen ob länge eines Arrays == 0 Java Basics - Anfänger-Themen 4
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste und Arrays Java Basics - Anfänger-Themen 12
N mehrdimensionale arrays Java Basics - Anfänger-Themen 12
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
S Hilfe bei Praktischen Aufgaben von Arrays Java Basics - Anfänger-Themen 39
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
J Mehrdimensionale Arrays Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
M Arrays Java Basics - Anfänger-Themen 3
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
Ostkreuz Summieren von Arrays Java Basics - Anfänger-Themen 4
javaBoon86 Arrays 2 Dimension Werte ausgeben Java Basics - Anfänger-Themen 15
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
ArrayList mit unbekannter Menge an Arrays die Arrays vergleichen Java Basics - Anfänger-Themen 9
D Arrays an replaceAll-Methode übergeben Java Basics - Anfänger-Themen 12
rosima26 Geordnete Arrays ausgeben Java Basics - Anfänger-Themen 31
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
C Zwei Arrays addieren und ausgeben Java Basics - Anfänger-Themen 3
E Zinsrechnung mithilfe von Arrays Java Basics - Anfänger-Themen 12
LePetitChat1 Arrays - NullPointerException? Java Basics - Anfänger-Themen 14
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
H Arrays befüllen Java Basics - Anfänger-Themen 43
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
D Arrays Java Basics - Anfänger-Themen 9
C Java Arrays - Ausgabe in Methode Java Basics - Anfänger-Themen 12
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
N Arrays Java Basics - Anfänger-Themen 5
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
U zwei 2D arrays auf gleich sein überprüfen Java Basics - Anfänger-Themen 14
melaniemueller Lagerverwaltung erstellen - mehrdimensionale Arrays Java Basics - Anfänger-Themen 62
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
A Arrays aufsummieren Java Basics - Anfänger-Themen 11
C Wie 2 Arrays zusammenfügen und sortieren? Java Basics - Anfänger-Themen 11
S Arrays aneinanderketten Java Basics - Anfänger-Themen 20
Sinan Arrays auflisten ohne Wiederholung Java Basics - Anfänger-Themen 28
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
R Werte und Reihenfolge in 2d Arrays vergleichen Java Basics - Anfänger-Themen 5
D Verschlüsslungsaufgabe / Arrays Java Basics - Anfänger-Themen 6
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
L Methode zum invertieren eines Arrays Java Basics - Anfänger-Themen 7
S zweidimensionale char arrays Java Basics - Anfänger-Themen 14
J Methoden Mehrdimensionale Arrays übereinander legen Java Basics - Anfänger-Themen 5
D Verwirrung bei Streams aus primitiven Arrays Java Basics - Anfänger-Themen 2
P Arrays mit verschiedenen Längen miteinander dividieren. Java Basics - Anfänger-Themen 1
P Wie kann ich die Zahlen dieses Arrays dividieren? Java Basics - Anfänger-Themen 2
N 2D Arrays jedes xy vergleichen Java Basics - Anfänger-Themen 7
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
Kawastori Größe eines Arrays bestimmen Java Basics - Anfänger-Themen 13
Zeppi Arrays[i] Java Basics - Anfänger-Themen 7
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
J B-Sprache mit Arrays ausführen Java Basics - Anfänger-Themen 18
A Teilarrays eines 2D-Arrays sortieren Java Basics - Anfänger-Themen 4
C Arrays - deklarieren, initialisieren? Ist das ein Objekt? Java Basics - Anfänger-Themen 3
K Sudoku mit 2D Arrays Java Basics - Anfänger-Themen 19
T Vertikales Histogramm mit Arrays Java Basics - Anfänger-Themen 3
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
F Arrays: Mathematische Funktion Java Basics - Anfänger-Themen 19
mihe7 Von Datentypen und (mehrdimensionalen) Arrays Java Basics - Anfänger-Themen 4
A Teilen eines Arrays Java Basics - Anfänger-Themen 5
DorFey Sortieren eines mehrdimensionalen Arrays Java Basics - Anfänger-Themen 8
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
L If und else bei 2 Dimensionalen Arrays Java Basics - Anfänger-Themen 8
1 Arrays Java Basics - Anfänger-Themen 7
M Rückgabe eines Arrays Java Basics - Anfänger-Themen 10
L Addition von Arrays über die Parameterliste Java Basics - Anfänger-Themen 11
Z Erste Schritte Indexe innerhalb eines Arrays zusammensählen Java Basics - Anfänger-Themen 14
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
S Übergabe von Arrays an Methoden Java Basics - Anfänger-Themen 20
D Collections Arrays in ArrayList abspeichern Java Basics - Anfänger-Themen 6
A Freie Stelle eines Arrays Java Basics - Anfänger-Themen 17
H Ein gegebenes Int Array zu Zwei Arrays zurück geben Java Basics - Anfänger-Themen 6
J 2D Arrays summieren Java Basics - Anfänger-Themen 21
J zwei String Arrays miteinander vergleichen Java Basics - Anfänger-Themen 18
A Java.util.Arrays Java Basics - Anfänger-Themen 15
T Methodenverknüpfung mit Arrays Java Basics - Anfänger-Themen 4
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
B Arrays Java Basics - Anfänger-Themen 4
P Arrays "automatisch" erstellen lassen Java Basics - Anfänger-Themen 12
B Nur eine bestimmte Anzahl an Arrays ausgeben Java Basics - Anfänger-Themen 9
H Gemeinsame Schnittmenge zweier Arrays ausgeben Java Basics - Anfänger-Themen 12
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
A Summe des Arrays pd mit alternativer Schleife Java Basics - Anfänger-Themen 2
S Elemente eines Arrays bei Ausgabe auslassen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben