Как сбросить счетчик в 2D массиве

#java #arrays

Вопрос:

 public void drop(){
    //6 * 7 = 42 turns, 6 * 9 = 54 turns
    int totalTurns = 0;
    int tempRow = 5;
    int counter = 0;
    while(totalTurns <= 5){
        System.out.println("What column would you like to drop a piece into?: ");
        Scanner scannerBoard = new Scanner(System.in);
        int columnInput = scannerBoard.nextInt();
        if(columnInput <= boardArray[0].length){
            if(boardArray[5][columnInput] == ' '){
                boardArray[5][columnInput] = 'x';

            }
            else if(boardArray[5][columnInput] == 'x'){
                if(boardArray[5-counter][columnInput] == ' '){
                    boardArray[5- counter][columnInput] = 'x';

                }
                counter  = 1;
                System.out.println(counter);
            }

            totalTurns = totalTurns   1;
            if(counter== boardArray.length){
                break;
            }
        }

    }
}

Do you want to play Normal or Expert mode: 
normal
[[ ,  ,  ,  ,  ,  ,  ],
 [ ,  ,  ,  ,  ,  ,  ],
 [ ,  ,  ,  ,  ,  ,  ],
 [ ,  ,  ,  ,  ,  ,  ],
 [ ,  ,  ,  ,  ,  ,  ],
 [ ,  ,  ,  ,  ,  ,  ]]
What column would you like to drop a piece into?: 
0
What column would you like to drop a piece into?: 
0
1
What column would you like to drop a piece into?: 
0
2
What column would you like to drop a piece into?: 
0
3
What column would you like to drop a piece into?: 
1
What column would you like to drop a piece into?: 
1
4
[[ ,  ,  ,  ,  ,  ,  ],
 [ ,  ,  ,  ,  ,  ,  ],
 [ , x,  ,  ,  ,  ,  ],
 [x,  ,  ,  ,  ,  ,  ],
 [x,  ,  ,  ,  ,  ,  ],
 [x, x,  ,  ,  ,  ,  ]]

Process finished with exit code 0
 

Я пытаюсь поставить «х» друг на друга. Я заметил, что если я ввожу один и тот же столбец, он работает нормально. Но как только я ввожу другой столбец, переменная декремента не сбрасывается обратно в ноль. Как бы я сбросил переменную обратно в ноль, перейдя в другой столбец?

Комментарии:

1. Следите за номером предыдущей колонки: if (currentColumn != previousColumn) { counter = 0; } .

2. Если моя входная переменная-columnInput, должен ли я тогда сделать currentColumn = columnInput? Что бы я сделал переменной предыдущего столбца?

3. if (columnInput != previousColumn) { counter = 0; } но вы также захотите подсчитать, сколько x уже находится в этом предоставленном столбце. for (int i = 0; i < boardArray.length; i ) { if (boardArray[i][columnInput] == 'x') {counter ; } } .

Ответ №1:

Есть несколько способов выполнить то, что, как я думаю, вы пытаетесь сделать. Если вы хотите продолжать использовать свой собственный код, попробуйте то, что я предложил в комментариях, это не так сложно реализовать.

Однако, если вы хотите попробовать что-то немного другое, то приведенная ниже концепция может быть несколько лучше для вас. Код просто берет предоставленный пользователем номер столбца и проверяет этот столбец в матрице игрового поля на наличие X и увеличивает counter переменную для каждого X, найденного в столбце, по всей матрице. Затем он определяет, какая строка матрицы пуста, чтобы принять еще один X для этого столбца. Каждая while итерация цикла сбрасывает счетчик на 1, затем этот счетчик увеличивается в зависимости от количества X, обнаруженных в предоставленном столбце.

Код является работоспособным и содержит несколько комментариев, которые вам следует прочитать. Поскольку я понятия не имею, как ведется эта игра, вам понадобится код в ограничениях и правилах игры:

 public class OrthelloMatrixDemo {

    private char[][] boardArray;
    private final java.util.Scanner scannerBoard = new java.util.Scanner(System.in);
    private final int boardRows = 6;
    private final int boardColumns = 7;
    
    // Example turns calculation: 
    // 6 rows x 7 columns = 42 turns OR
    // 6 rows x 9 columns = 54 turns
    private final int turns = boardRows * boardColumns;
    
    
    public static void main(String[] args) {
       // Done to avoid the need for statics
        new OrthelloMatrixDemo().startGame(args);
    }
    
    private void startGame(String[] args) {
        // Create the board...
        boardArray = new char[boardRows][boardColumns];
        for (int i = 0; i < boardRows; i  ) {
            for (int j = 0; j < boardColumns; j  ) {
                boardArray[i][j] = ' ';
            }
        }
        // =============================================
        
        printBoard();  // Print the game Board to console window.
        
        //for (int i = 0; i < (turns); i  ) {
            dropGamePiece();
        //}
    }
    
    private void printBoard() {
        for (int i = 0; i < boardArray.length; i  ) {
            System.out.println(java.util.Arrays.toString(boardArray[i]));
        }
    }
    
    public void dropGamePiece() {
        int totalTurns = 0;
        int counter = 1;
        int availRow = boardRows - 1;
        while (totalTurns <= 5) {
            System.out.println();
            System.out.print("What literal column would you liken"
                             "to drop a game piece into (1 to "   
                             boardColumns   ")? --> ");
            int columnInput = -1;
            try {
                // Subtract 1 from the supplied User input value so to
                // hold the index value instead of the literal value.
                columnInput = scannerBoard.nextInt() - 1; 
            }
            catch (java.util.InputMismatchException ex) {
                System.out.println("You must supply a Column Number "
                                 "from 1 to "   boardColumns   "!");
                // Consume the ENTER key hit otherwise this Exception 
                // will just keep printing to console indefinately. 
                scannerBoard.nextLine(); 
                continue;  // Go to top of loop
            }
            
            // Make sure a value from 1 to 7 is supplied.
            if ((columnInput   1) < 1 || (columnInput   1) > boardColumns) {
                System.out.println("You can not supply a column numbern"
                                 "less than 1 or greater than "   boardColumns   "!");
                continue;  // Go to top of loop
            }
            counter = 1;    // Start counter from 1
            // Count how many X's are already in supplied column.
            for (int i = 0; i < boardArray.length; i  ) { 
                if (boardArray[i][columnInput] == 'x') {
                    counter  ; 
                } 
            }
            // Determine the next available row to drop a 
            // game piece into the supplied column.
            availRow = boardRows - counter;
            if (availRow < 0) {
                System.out.println("Column "   (columnInput   1)   " is aready full!");
                continue;  // Go to top of loop
            }
            boardArray[availRow][columnInput] = 'x';
            System.out.println("Column "   (columnInput   1)  
                            " contains "   counter   " X's." );
            printBoard(); // Print the game Board to console window.
            totalTurns  ;
        }
    }
}