Methoden "ziehen ohne zurücklegen" - Kontrollstruktur

k3ltis

Mitglied
Hallo!

Ich komme bei meinem Quelltext nicht weiter... ich glaube ich hab meinen Gedanken dazu etwas verquert.

Der Kern meines Problems: ziehen ohne zurücklegen.

Hier der (unfertige) Code:

Java:
...
byte gezogeneKarten[] ={-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};//In diesem Array werden die bereits gezogenen Karten gespeichert. Dabei sind die ersten 8 Stellen für die Spielerkarten und die zweiten 8 Stellen für die Gegnerkarten reserviert; -1 bedeutet der Platz ist nicht belegt.
...
 
 public static byte zieheKarte(byte gezogeneKarten[]){ //Methode zum vergleichen einer neu gezogenen Karte und einer bereits gezogenen.
	    	byte zahl; 
	    	boolean status=true; 
	    	
	    	do{
	    		zahl = (byte)gibZufallszahl(52); //in "zahl" wird eine Zufällige Karte gespeichert   
	    		for (int i=0; i<gezogeneKarten.length; i++){
	    			if (gezogeneKarten[i] != zahl){status = false;}
	    			else if (gezogeneKarten[i] == zahl){status = true;}
	    		}
	    	}while(status);

                /*Das eigentliche Problem ist diese do{...}while(...); Schleife. Es sollen alle Inhalte des
                 *Arrays gezogeneKarten() mit der Zufällig bestimmten Zahl verglichen werden und im Falle
	    	 *einer Übereinstimmung soll die Schleife wiederholt werden.
                 *Das Problem ist offensichtlich: Durch die if(...) Abfrage wird der status einfach über-
                 *schrieben.
                 */
	    	return zahl;
	    }

Ich möchte, dass die Schleife erst dann wiederholt, wenn alle Werte überprüft sidn und sich eine Übereinstimmung ergeben hat. Wenn alle Werte keine Übereinstimmung zeigen soll die Schleife beenden und die Methode verlassen werden.

Gruß
k3ltis
 
Zuletzt bearbeitet:
Moin,

richtig - am Ende der for-Schleife hast Du auf Deiner Varible "status" nur den Wert des letzten Vergleich stehen !!
Und je nachdem ob der passt oder nicht, wird dann ggf. die while-Schleife beendet 😉

Gruß
Klaus
 
In der for Schleife muss es mindestens eine Überstimmung geben, richtig? D.h., du willst wissen, ob es mindestens eine oder keine Übereinstimmung gab.

Um den Status nicht zu überschreiben, musst du ihn in den if Bedingungen berücksichtigen.
Alternativ kannst du auch ein break ausführen für den Fall dass eine Übereinstimmung erfolgt .

Java:
if (gezogeneKarten[i] == zahl) {
           status = true;   
           break;
}
 
Zuletzt bearbeitet:
Du könntest staus vor der for-Schleife auf false setzen. In der Schleife sezt du status dann im falle einer Übereinstimmung auf true zurück.
Innerhalb der for Schliefe status NICHT mehr auf fasle setzen.
 
Danke euch.

Du könntest staus vor der for-Schleife auf false setzen. In der Schleife sezt du status dann im falle einer Übereinstimmung auf true zurück.
Innerhalb der for Schliefe status NICHT mehr auf fasle setzen.

T7V's Beitrag hat mir entscheident weitergeholfen - danke!

mfg
k3ltis
 

Zurück
Oben