Spielerwechsel über boolsche Werte läuft inkorrekt

D

Dracor1588

Gast
Guten Abend,

ich sitze gerade an einem Uni Abschlussprojekt namens Knobel (nein, NICHT Kniffel, weil das hat ja copyright, so unser Prof *gg*).

Folgendes Problem. Die ganze Swing GUI läuft gut, als Punktezettel verwende ich eine JTable. ich kann würfeln, bla bla, summa summarum klappt auch das eintragen der Werte in die JTable gut, aber ich habe Probleme zwischen den 4 möglichen Spielern zu wechseln. Meine Vier Spieler sind bool'sche Werte

Java:
 public class KnobelModel {
       static int wurfzaehler = 0;
       static boolean spieler1;
       static boolean spieler2;
       static boolean spieler3;
       static boolean spieler4;



über

Java:
 private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {                                     
        int f = jTable1.getSelectedColumn();
        int e = jTable1.getSelectedRow();

        jTable1.setValueAt(KnobelModel.tabelleneintrag(e, f), e, f);

lass ich mir, sobald meine 3 Würfe um sind, durch einen Klick auf die Tabelle angeben, wo die Punkte eingetragen werden sollen.
Die Berechnung der einzelnen Einträge mach ich über eine switch/case Anweisung

Java:
 public static int tabelleneintrag(int reihe, int spalte){

//(...)

if((spieler1 == true)&&(spalte == 1)){

               switch(reihe){
                    case (1):
                       
                        for(int i=0;i<wurfaugen2.length; i++){
                            if(KnobelModel.wurfaugen2[i] == 1){
                                ergebnis = ergebnis + KnobelModel.wurfaugen2[i];
                            }
                        }
                        ergebnisse[0] = ergebnis;
                        KnobelView21.jTable1.setValueAt(ergebnis, 1, 1);
                        checksum();
                        reset();
                return ergebnis;
//(...)

ganz am Ende aller Case Anweisung schalte ich den aktuellen Spieler auf false und den nächsten auf true:

Java:
//(hier oben der letzte return aus der case schleife)

} 
spieler1 =false;
 spieler2 = true; 

} //(Hier geht die große if schleife if((spieler1==true)&&(spalte ==1)) zuende

Problem ist: Das überswitchen in den nächsten Spieler klappt nicht. Jedesmal wenn eigentlich spieler 1 = false sein sollte und ich was bei spieler 2 eintragen will springt er mir aus der gesamten schleife raus und trägt mir nur den standard return wert -1 ein....

Ein bisschen schlauer bin ich schon:

Wenn ich den Wechsel gleich zu Beginn der if Schleife mache, also:

Java:
 if((spieler1 == true)&&(spalte == 1)){
                 spieler1 =false;
                 spieler2 = true;

klappen die ersten 3 spielerwechsel gut (mal davon abgesehen, dass meine checksum Funktion dann umgeschrieben werden müsste, aber das is wurst)..nur der Spielerwechsel von 3 auf 4 klappt wieder nicht. Ich habs 3 mal überprüft, der code is genau der selbe ^^ auch keinen zahlendreher oder so nen blödsinn drin.

Ich weiß nicht mehr weiter...was mach ich falsch? Um Fragen vorwegzunehmen...die Funktionen reset() und checksum() nehmen keinen einfluss auf die bool'schen Spieler und auch sonst ändere ich die werte NUR in den if Schleifen.

ich dachte erst, weil ich standardmäßig spieler1 als true initialisiert habe, dass es daran liegen könnte, aber ich hab mir jetzt nen spiel starten button geschrieben, wodurch spieler1 auch als default false initialisiert wird, und dann erst mit klick auf true gesetzt wird -> keine Wirkung.

ich muss da irgendwo nen Denkfehler drin haben, aber ich seh ihn einfach nicht, deshalb hoffe ich dass ein paar Augenpaare mehr in erkennbar machen ^^

Liebe Grüße

Dracor
 

Landei

Top Contributor
Wenn du spieler1 und spieler2 "umschalten" willst, geht das am einfachsten mit
Java:
  spieler1 = ! spieler1;
  spieler2 = ! spieler2;
 
D

Dracor1588

Gast
Ok, alles zurück...ich hatte nen dämlichen Klammerungsfehler vo 3ten zum 4erten Spieler...jetzt läuft der Spielerwechsel, aber eben halt auch nur wenn ich wie oben beschrieben die spieler gleich nach Beginn der if Schleife umswitche....was aber doof für meine checksum Funktion ist.

Außerdem möchte ich auch gerne verstehen WARUM das mit der Variante ich switche die als letztes um nicht klappt....kann mir das jemand bitte erläutern? dann müsste ich nicht die nächste Funktion umschreiben ^^

Liebe Grüße

Dracor
 
D

Dracor1588

Gast
Wenn du spieler1 und spieler2 "umschalten" willst, geht das am einfachsten mit
Java:
  spieler1 = ! spieler1;
  spieler2 = ! spieler2;

Hmm, kannst du mir 2 sätze dazu schreiben? wenn ich das richtig verstehe progge ich damit: spieler1 ungleich spieler1 und spieler2 ungleich spieler2.....? ^^
 
D

Dracor1588

Gast
Also ich habe es gerade mal eingebunden...zur Erinnerung: ich will von Spieler1 auf Spieler2 UMSCHALTEN..eingebunden habe ich es genauso wie du es oben gesagt hast.

Funktioniert irgendwie auch nicht. Bin wohl zu doof ^^
 

Landei

Top Contributor
Ich gehe mal davon aus, dass am Anfang spieler1 == true und spieler2 == false ist, und dass du bei jedem "Zug" die Werte wechseln willst, also beim nächsten Durchlauf spieler1 == false und spieler2 == true u.s.w. Also wenn in einer der Variablen true drinsteht, soll beim nächsten mal false drinstehen und umgekehrt. Also negiere ich einfach den aktuellen Wert (das ! ist die logische Negation, in anderen Sprachen z.B. das "not").

Generell erscheint mir das, was ich oben sehe, ziemlich umständlich, aber ohne mehr Code kann ich dazu nicht viel sagen.
 

mohrenkopf

Mitglied
Hi Dracor,

das ganze sieht mir auf den ersten Blick ein bisschen arg "festverdrahtet" und wenig nach OOP aus.

Läuft dein Programm nur mit 4 Spielern oder auch mit 2,3 oder 100? Vielleicht lohnt sich ein allgemeinerer Ansatz, selbst wenn die Vorgabe heißt "genau 4 Spieler", das ist ja dann nur ein Spezialfall der allgemeinen Lösung.

Der codeteil if ((spieler==1) && (spalte==1)) kommt doch bestimmt für jeden Spieler extra im Code vor? Saubereres Design wäre bestimmt
Java:
if (gewaehlteSpalte == spielerDerGeradeDranIst)

oder wahrscheinlich noch besser

Java:
if(geawahlteSpalte == spielmanager.spielerDerGeradeDranIst() )

und zum Spielerwechsel:
Java:
spielmanager.zumNaechstenSpielerWechseln();
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
kodela Datenübergabe über Buttons Allgemeine Java-Themen 8
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
A ByteArray über Socket Allgemeine Java-Themen 3
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
I 2D-Grafik Vektor-Grafik über die Zwischenablage nach Adobe Illustrator transferieren Allgemeine Java-Themen 8
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
I OpenPDF erzeugt riesige PDFs, wenn Grafiken über PdfGraphics2D#drawImage gezeichnet werden Allgemeine Java-Themen 1
T Etikettendrucker über TCP-IP Allgemeine Java-Themen 1
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
Master3000 Java Konsole über Buffered Reader Zeilenweise auslesen ? Allgemeine Java-Themen 26
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
L Aufwandsabschätzung: Android-App Aufnahmefunktion (foto) und zweiter Ebene über dem Foto (teiltransparent) Allgemeine Java-Themen 6
M Registry Autostart Eintrag mit Java erstellen (über Windows cmd) Allgemeine Java-Themen 7
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Threads über Kommandozeile Allgemeine Java-Themen 5
david19 Software AE über Domain laufen lassen Allgemeine Java-Themen 0
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
K Auf Dateiverzeichnis extern zugreifen (evtl über XML??) Allgemeine Java-Themen 22
C VisualVM oder Jconsole über Jolokia-Proxy Allgemeine Java-Themen 0
G USB-Pins über Java ansteuern Allgemeine Java-Themen 8
Ernesto95 Best Practice Localization über ResourceBundle Allgemeine Java-Themen 6
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
T Strings über Bluetooth zwischen PC,µc oder Samrtphone senden und empfangen Allgemeine Java-Themen 0
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
kodela Eigenartige Datumsberechnung über GregorianCalendar Allgemeine Java-Themen 15
HarleyDavidson Best Practice Integer-Zahlenfolge über mehrere Programmstarts Allgemeine Java-Themen 7
T .jar über cmd ausführen (später dann batch) Allgemeine Java-Themen 6
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
C Input/Output Zip Files über Socket senden und empfangen Allgemeine Java-Themen 6
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
L Videodateien über Java öffnen unabhängig vom Format Allgemeine Java-Themen 4
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
F Content-Disposition ermitteln über URL Allgemeine Java-Themen 2
ARadauer Checksumme über BigDecimal Werte Allgemeine Java-Themen 11
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
S VLC + Lied über Java starten Allgemeine Java-Themen 17
M HTML-Code von Webseite über Browser oder Console auslesen?? Allgemeine Java-Themen 5
A Sinuston ausgeben und über Mikro Amplitude messen – machbar? Allgemeine Java-Themen 6
R Java-Progamm über Icon starten unter Windows Allgemeine Java-Themen 9
C Daten über URL an PHP verschicken Allgemeine Java-Themen 4
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
aze Jar ausführen über Runtime.execute funktioniert nicht Allgemeine Java-Themen 4
S NoSuchMethodError beim Ausführen einer C Methode über JNI Allgemeine Java-Themen 5
H OOP Daten über TCP Allgemeine Java-Themen 5
Pastafari Iterator über nested HashMaps Allgemeine Java-Themen 7
R ListIterator über mehrere Arrays Allgemeine Java-Themen 13
G Interface Laden der Konfiguration über Interfaces sinnvoll? Allgemeine Java-Themen 28
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
B VoIP-Gespräche über Computer führen Allgemeine Java-Themen 3
S Jar-File startet nicht über doppelklick Allgemeine Java-Themen 2
C Java Programm über SSH starten Allgemeine Java-Themen 16
K Internetverbindung über PuTTy herstellen?! Allgemeine Java-Themen 9
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
S Input/Output Binärdatei über Bytestreams Allgemeine Java-Themen 4
S Kommunikation von Core und GUI über Schnittstellen Allgemeine Java-Themen 2
J Explorer über Code starten Allgemeine Java-Themen 15
kodela Problem mit Kopieren über FileChannel Allgemeine Java-Themen 4
L Java und Javascript um Distanz über Google Maps zu berchnen Allgemeine Java-Themen 10
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
M Ampelsteuerung über Timer in Java realisieren Allgemeine Java-Themen 3
L CMD über Java öffnen Allgemeine Java-Themen 8
U Mailclient über getDesktop.mail vorbereiten, Problem beim Anhang: Allgemeine Java-Themen 3
R Klasse über Button Event in anderer Klasse informieren Allgemeine Java-Themen 11
R Frequenzausgabe (2 Kanal) über Lautsprecherausgang Allgemeine Java-Themen 22
J Java-Klasse über Konsole starten Allgemeine Java-Themen 6
E FF Einstellungen über Programm ändern? Allgemeine Java-Themen 7
D JVM kann nicht über die jvm.dll gestartet werden? Allgemeine Java-Themen 1
S File im windowexploer öffnen über java Allgemeine Java-Themen 6
J Receive eines Hex-Bytes über COM-Port Allgemeine Java-Themen 4
Nicer Prozess über Prozessnamen beenden Allgemeine Java-Themen 15
reibi File über FileChannel locken Allgemeine Java-Themen 5
B Serialisierung mit Unterobjekten über Netzwerk Allgemeine Java-Themen 3
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
B parallele / Multithreaded Iteration über Map Allgemeine Java-Themen 12
D Unix/Linux Benutzer-Authentifikation über Java Allgemeine Java-Themen 3
M Tastatur eingabe über Buttons Allgemeine Java-Themen 15
S GPS-Maus über USB ansprechen Allgemeine Java-Themen 8
reibi Files über Classpath laden Allgemeine Java-Themen 22
M Selbst geschriebener InputStreamReader über einen beliebigen InputStream Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben