#java #class #intellij-idea #arraylist
Вопрос:
Поэтому я создал программу крестики-нолики в Intellij, которая использует файл index.xhtml в качестве кода, который печатает таблицу 3×3 и имеет поле ввода, которое запрашивает пользователя, в какую ячейку поместить его ход, как только пользователь отправит свой ход, программа перейдет к файлу java.
lt;table border="1"gt; lt;trgt; lt;tdgt;#{functions.board.get(0)}lt;/tdgt; lt;tdgt;#{functions.board.get(1)}lt;/tdgt; lt;tdgt;#{functions.board.get(2)}lt;/tdgt; lt;/trgt; .... lt;/tablegt; lt;h:formgt; lt;h:outputLabel value="Your move" for="move"/gt; lt;h:inputText value="#{functions.move.move}" id="move" validatorMessage="Only numbers 1-9 are accepted" required="true"gt; lt;f:validateRegex pattern="([1-9])"/gt; lt;/h:inputTextgt; lt;h:commandButton value="submit" action="#{functions.main_method}"/gt; lt;/h:formgt;
и у меня есть еще 2 класса, один класс действует как управляемый компонент для перемещения игроков, а другой выполняет все функции в отношении принятия решения о том, является ли ход игроков действительным, победителем игры, перемещением компьютеров и есть ли еще пустые места на доске для продолжения игры
public class backend implements Serializable { private String move; public String getMove() { return move; } public void setMove(String move) { this.move = move; } public backend(){ } public backend(String move) { this.move = move; } @Override public String toString() { return "backend{" "move=" move '}'; } }
Listlt;Stringgt; board = Arrays.asList("1","2","3","4","5","6","7","8","9"); private String winner; private backend move = new backend(); public String main_method(){ if(!check_move(move.getMove(), true)){ return "index?faces-redirect=true"; //this is the move where the player cell is taken }else { switch (check_board()){ case "1p": return "winner?faces-redirect=true"; case "2p": return "winner?faces-redirect=true"; case "tie": return "winner?faces-redirect=true"; default: return "index?faces=redirect=true"; } } } public Boolean check_move(String the_move, Boolean player){ switch (the_move){ case "1": some function returns true when the cell is available } .... default: return false; } } public String check_board(){ Boolean counter = false; for(int j=0; jlt;9;j ){ if(board.get(j).equals("X") || board.get(j).equals("O")){ counter = true; break; } } return check_winner(counter, false); } public String check_winner(boolean spaces, boolean comp_turn){ if (spaces){ if(board.get(0).equals("X") amp;amp; board.get(1).equals("X") amp;amp; board.get(2).equals("X") ){ return "1p"; .... }else{ if (comp_turn){ return "none"; }else{ comp_move(); } } }else{ return "tie"; } return "none"; } public void comp_move(){ Random rand = new Random(); int upperbound = 9; while(true){ int comp_move = rand.nextInt(upperbound); String real_move = String.valueOf(comp_move); if(check_move(real_move, false)){ break; } } check_winner(true, true); }
Основная проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда пользователь вводит свой второй ход, массив не сохраняет новые значения, в которых перемещение пользователей было помещено в массив, есть ли способ сохранить новые значения массива всякий раз, когда пользователь отправляется обратно в файл index.xhtml проекта после того, как программа обработала все функции, которые у нее есть?