2016-08-04 12 views
0

작은 틱택 토 게임을 만들었습니다. 힙이 다시 지나갈 때마다 객체 위치를 변경하여 'X'와 'O'사이를 전환해야합니다 :루프에서 객체가 업데이트되지 않습니다. (자바)

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++; 
     } 
    } 
} 

그러나 항상 'X'가 출력되는 것처럼 보입니다. 왜 그런가요? 어떻게 고칠 수 있습니까?

UPDATE :이 필요한 경우 잘 모르겠지만, 내가 사용하는 오브젝트 내 차례 방법의 코드 결정이 :

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; 

공용 클래스 사용자 {

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; 
} 

}

업데이트 2 :

그래서 난 내 문제의 대부분을 나는 아직도 오전에만 일을 해결했습니다 궁금한 점이있다면 (미안하지만 어리석은 질문이라면) 루프가 실행될 때마다 루프를 다시 생성하는 대신 루프 내부에서 객체를 재사용 할 수 있습니다. 매번 내 회전 변수를 0으로 새로 고치지 않기 때문에이 질문을합니다.

+2

'Test'와'User' 클래스를 보여주세요. 질문에 대한 답변을 얻을 수있는 정보가 충분하지 않습니다. – flakes

+1

매번 새로운 보드를 만드는 이유는 무엇입니까? – Li357

+0

'System.out.println (use);'print는 무엇을합니까? –

답변

0

값은 for 루프 내에서 use.getMark()을 호출하여 설정합니다.이 값은 board입니다. use 변수가 변경되지 않는다면 각 반복마다 동일한 값을 반환 할 가능성이 있습니다 (내부적으로 반복되지 않는 한 설계상의 결함이 있음). 보드를 User[][]으로 변경 한 다음 board[x][y].getMark()을 사용하여 '마크'를 얻을 수 있습니다.

그러나 근본적으로 소프트웨어를 작동시키는 가장 좋은 방법은 코드로 단위 테스트를 작성하는 것입니다. 보드를 인쇄하는 등의 작업을 시도하기 전에 UserPlayer의 테스트를 수행해야합니다. 개발하면서 단위 테스트를 배우면 문제가 훨씬 적어지고 진단하고 수정하기가 쉽습니다. 문제를 진단하기 위해 print 서술문을 사용하는 것보다 훨씬 더 지속 가능한 접근법입니다.

사용중인 모델은 매우 드뭅니다. 왜 당신의 메소드가 다른 객체로 접근 할 수없는 배열로 표현 된 보드를 가지고 있는지 불분명합니다. 그건 꽤 무의미한 것 같습니다. 나는 당신이 클래스 Board, Player, Move을 적절히 분리하는 것이 좋을 것이라고 제안합니다.