2016-08-04 102 views
0

Ich habe angefangen, ein kleines Tic Tac Toe Spiel zu erstellen, das jedes Mal, wenn der Lop wieder durchläuft, zwischen 'X' und 'O' wechseln sollte, indem man die Objektposition ändert:Objekt wird nicht in Schleife aktualisiert (Java)

int m=0; 
    while(m<=3){ 
    Test t=new Test(); 
    User use= t.turn(); 
    System.out.println(use); 

    char[][] board=new char[3][3]; 


    System.out.println(" 1 2 3"); 

    for(int y=0;y<board.length;y++){ 

     System.out.print(y+1); 
     for(int x=0;x<board.length;x++){ 

      board[x][y]=use.getMark(); 
      System.out.print("|"+board[x][y]+"|"); 
     } 

     System.out.println(); 
     m++; 
     } 
    } 
} 

Allerdings scheint jedes Mal ein 'X' auszugeben. Warum ist das und wie kann ich es beheben?

UPDATE: Ich weiß nicht, ob dies erforderlich ist, aber ich habe den Code von meiner wiederum Methode zu entscheiden, welche zu verwenden Objekt:

public User turn(){ 

    User use; 
    PlayerX playX=new PlayerX(); 
    PlayerO playO=new PlayerO(); 
    Board board=new Board(); 
    int xturn=playX.getTurn(); 
    int oturn=playO.getTurn(); 

    if(xturn<=oturn){ 
     use=playX; 
     System.out.println("X"); 
     xturn++; 
    }else{ 
     use=playO; 
     System.out.println("O"); 
     oturn++; 
    } 
    System.out.println(xturn); 
    System.out.println(oturn); 
    return use; 
} 


package TicTacToe; 

public class User {

private int XCoord; 
private int YCoord; 
private int Turn=0; 
private char Mark; 

public int getX(){ 
    return XCoord; 
} 
public int getY(){ 
    return YCoord; 

} 
public int getTurn(){ 
    return Turn; 

} 
public char getMark(){ 
    return Mark; 
} 

}

UPDATE 2:

So habe ich die meisten meiner Probleme behoben das einzige, was ich noch bin frage mich (es tut mir leid, wenn das eine dumme Frage ist), gibt es sowieso ein Objekt in einer Schleife wieder zu verwenden, anstatt es jedes Mal neu erstellt wird, wenn die Schleife ausgeführt wird. Ich frage dies, weil ich nicht möchte, dass meine Umdrehungsvariable jedes Mal auf 0 aktualisiert wird

+2

Zeigen Sie uns die 'Test'- und' User'-Klassen. Es gibt nicht genügend Informationen hier, um Ihre Frage zu beantworten. – flakes

+1

Warum erstellen Sie jedes Mal ein neues Board? – Li357

+0

Was macht 'System.out.println (use);' print? –

Antwort

0

Die Werte in board werden durch Aufruf von use.getMark() innerhalb Ihrer for Schleifen festgelegt. Wenn sich die Variable use nicht ändert, wird wahrscheinlich jeder Iteration derselbe Wert zurückgegeben (es sei denn, es wird intern iteriert, was wahrscheinlich einen Designfehler zeigt). Sie könnten die Platine in User[][] ändern und dann die Markierung mit board[x][y].getMark() erhalten.

Grundlegender jedoch ist der beste Weg, um Ihre Software zum Laufen zu bringen, indem Sie Komponententests mit Ihrem Code erstellen. Sie sollten Tests haben, die zeigen, dass User und Player das tun, was Sie erwarten, bevor Sie Dinge wie das Drucken des Boards ausprobieren. Ich würde vorschlagen, dass, wenn Sie während der Entwicklung Unit-Test lernen, Sie weit weniger Probleme haben werden und die, die Sie haben, leichter zu diagnostizieren und zu beheben sind. Dies ist ein viel nachhaltigerer Ansatz als die Verwendung von Druckanweisungen zur Diagnose von Problemen.

Das Modell, das Sie verwenden, ist ziemlich ungewöhnlich. Es ist unklar, warum Ihre Methode über eine Karte verfügt, die durch ein Array repräsentiert wird, das für andere Objekte nicht zugänglich ist. Das scheint ziemlich sinnlos zu sein. Ich würde vorschlagen, Sie könnten Klassen Board, Player, , um Verantwortlichkeiten ordnungsgemäß getrennt werden.