warum wird es doppelt ausgegeben

Nico1999

Aktives Mitglied
Java:
public class Figur{
    private int x;
    private int y;
    private int graphik;
    private int movezähler;

public boolean legalmove(int a[][], int jetztx, int jetzty, int dannx, int danny) {//5 =Turmweiß   Schwarz = -Zahlen
        int k=a[jetztx][jetzty];
        if(k==5&&this.x==jetztx&&this.y==jetzty&&a[dannx][danny]<=0&&(jetztx-dannx==0^jetzty-danny==0)&&a[jetztx][jetzty]==5) {//prüfe ob Turmmoven kann
            if(jetztx-dannx<0) {//nach vorne
                for(int i =1; i<dannx-jetztx+1;i++) {//dannx =5 jetztx=3
                    if(a[jetztx+i][jetzty]==0) {//prüfe ob feld frei ist
                        
                    }else {
                        if(a[jetztx+i][jetzty]<0&&dannx-jetztx-i==0){//wenn Feld nicht frei ist prüfe ob es vom Gegner ist und der Zielmove war
                            this.x=dannx;
                            System.out.println("this x="+this.x);
                            return true;
                        }else {
                            System.out.println("Figur kann andere Figuren nicht überspringen 1");
                            return false;
                        }
                    }
                }return true;
            }
        }
    }
}
Java:
public class Spiel{
    public static void main(String[] args) {
        for(Figur a :figurliste) {
                 if(a.legalmove(schachbrett1.getSchachbrett(), figurx, figury, eingabex, eingabey)) {
                     schachbrett1.figurbewegen(brett, figurx, figury, eingabex, eingabey);
                 }else{
                    
                 }
        }
    }
}
wie kann es sein das wenn legalmove = false weil wir in die letzte else schleife mit der Fehlermeldung kommen, dass diese zweimal ausgeben wird. Sollte nach return false; nicht sofort schluss sein (jede Figur sollte eigentlich individuell sein) . wie kann diese Meldung dann zweimal ausgeben werden ?
Danke schonma für eure antworten 🙂
 
Java:
Figur a :figurliste)
ich nehm mal an dass da 2 elemente drin sind und du einfach 2 mal a.legalmove aufrufst

ansonsten zum Code KONVENTIONEN
1. camelCase => legalMove... bei getSchachbrett hast du ja camelcase auch angewandt
2. überdenken von code
Java:
k==5&&this.x==jetztx&&this.y==jetzty&&a[dannx][danny]<=0&&(jetztx-dannx==0^jetzty-danny==0)&&a[jetztx][jetzty]==5
das kann vllt auf eine blöde struktur des programmes hindeuten
3. KEINE magic numbers... magic numbers sind hardgecodete zahlen bzw strings ... hierbei zb a[jetztx][jetzty]==5 <= der 5er ist ne magic number
.. mach ne
private final int FIVE = 5;
oder sonst was draus... auf jedenfall ein feld draus machen
4. Methoden aufteilen ... dein schinken an if else ist riesig mit noch ner for schleife drin...schau mal ne woche drauf dann weist du sicher nicht mehr was das ding macht
5. klassen raus ziehen für moves zb oder Figuren oder feld verhalten
 
Java:
Figur a :figurliste)
ich nehm mal an dass da 2 elemente drin sind und du einfach 2 mal a.legalmove aufrufst
da sind sogar 32 Elemente in den Figuren array allerdings hat jede Figur einen x und y wert der bei jeder Figur verschieden ist.
1. camelCase => legalMove... bei getSchachbrett hast du ja camelcase auch angewandt
Meinst du damit das man da eine Methode aufruft ?
2. überdenken von code
Java:
k==5&&this.x==jetztx&&this.y==jetzty&&a[dannx][danny]<=0&&(jetztx-dannx==0^jetzty-danny==0)&&a[jetztx][jetzty]==5
das kann vllt auf eine blöde struktur des programmes hindeuten
ich überprüfe halt zuerst ob die Klassevariablen gleich ist der eingabe sind, dann überprüfe ich ob auf dem zielfeld nicht eine eigene Figur steht, dann überprüfe ich ob es theoretisch ein legitimer Move für den Turm (entweder die x oder die y koordinate bewegen sich nicht beide zusammen)
und das letze ist vllt unnötig da eigentlich die Klassenvariablen reichen sollten, da überprüfe ich nochma sicherheitshalber ob das feld auch der Turm also 5 ist.
wenn das eine blöde struktur ist wie soll ich es anders aufbauen ? mit extra methoden die das dann überprüfen?
3. KEINE magic numbers... magic numbers sind hardgecodete zahlen bzw strings ... hierbei zb a[jetztx][jetzty]==5 <= der 5er ist ne magic number
.. mach ne
oder sonst was draus... auf jedenfall ein feld draus machen
könnte auch schreiben a[jetztx][jetzty]==this.graphik
was ist an den magic numbers schlimm ?
würdest du jetzt anstatt dessen das feld a [][] mit FIVE usw ausstatten?
5. klassen raus ziehen für moves zb oder Figuren oder feld verhalten
ich könnte die methode aufspalten in noch eine die überprüft ob frei ist würde allerdings immer noch ne lange methode werden
 
Und wenn du in drei Jahren den Code nochmal liest, weißt du immer noch, dass der Turm die Nummer 5 hat?
Da ist doch eine Konstante wie private final int TURM = 5; besser lesbar.
 
Java:
        for(Figur a :figurliste) {
                 if(a.legalmove(schachbrett1.getSchachbrett(), figurx, figury, eingabex, eingabey)) {
                     schachbrett1.figurbewegen(brett, figurx, figury, eingabex, eingabey);
                 }else{

du geht jede Figur in der for Schleife durch und prüft jede Figur mit „legalmove“ ist der Boolean true führst du „schachbrett1.figurbewegen“ aus.
Es könnte auch sein das du beim bewegen auch die „legalmove“ ausführst. Können wir leider nicht sehen.
Oder du führst es irgendwo anders in deinem Code noch mal aus.

Um zuprüfen ob wirklich von der selben Figur kommt lasse dir die Figur und x y Werte mit ausgeben.
 
Java:
        for(Figur a :figurliste) {
                 if(a.legalmove(schachbrett1.getSchachbrett(), figurx, figury, eingabex, eingabey)) {
                     schachbrett1.figurbewegen(brett, figurx, figury, eingabex, eingabey);
                 }else{

du geht jede Figur in der for Schleife durch und prüft jede Figur mit „legalmove“ ist der Boolean true führst du „schachbrett1.figurbewegen“ aus.
Es könnte auch sein das du beim bewegen auch die „legalmove“ ausführst. Können wir leider nicht sehen.
Oder du führst es irgendwo anders in deinem Code noch mal aus.

Um zuprüfen ob wirklich von der selben Figur kommt lasse dir die Figur und x y Werte mit ausgeben.
okay habs gefunden muss noch this.graphik==TURMW reinschreiben dann klappts danke für eure Hilfe
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben