2016-08-04 3 views
0

Я начал создавать небольшую игру с tic tac toe, которая каждый раз, когда лоп снова проходит, он должен переключаться между «X» и «O», изменяя местоположение объекта:Объект, не обновляющийся в цикле (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++; 
     } 
    } 
} 

Однако каждый раз, когда он, кажется, выводит «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; 
} 

}

UPDATE 2:

Так я исправили большинство моих проблем единственное, что я до сих пор (я сожалею, если это глупый вопрос), есть в любом случае повторное использование объекта внутри цикла, вместо того, чтобы его воссоздавать каждый раз при запуске цикла. Я спрашиваю об этом, потому что я не хочу, чтобы моя переменная поворота обновлялась до 0 каждый раз

+2

Покажите нам классы 'Test' и' User'. Здесь не достаточно информации, чтобы ответить на ваш вопрос. – flakes

+1

Почему вы каждый раз создаете новую доску? – Li357

+0

Что делает 'System.out.println (use);' print? –

ответ

0

Значения в board устанавливаются по телефону use.getMark() внутри ваших петель for. Учитывая, что переменная use не изменяется, она, вероятно, вернет одно и то же значение каждой итерации (если она не повторится внутри, что может привести к дефекту дизайна). Вы можете сменить плату на User[][], а затем получить «отметку» с помощью board[x][y].getMark().

Более принципиально, однако, лучший способ заставить ваше программное обеспечение работать, путем создания модульных тестов с вашим кодом. У вас должны быть тесты, демонстрирующие, что User и Player делают то, что вы ожидаете, перед тем, как попробовать что-то вроде печати на доске. Я бы предположил, что если вы научитесь тестировать единицу при разработке, у вас будет гораздо меньше проблем, а те, которые у вас есть, будут легче диагностировать и исправлять. Это гораздо более устойчивый подход, чем использование заявлений печати для диагностики проблем.

Модель, которую вы используете, довольно необычна. Непонятно, почему ваш метод имеет доску, представленную массивом, недоступным для любых других объектов. Это кажется довольно бессмысленным. Я бы предположил, что вам могут понадобиться классы Board, Player, Move для надлежащего разделения обязанностей.

Смежные вопросы