Использование метода для обновления 2D-массива путем нахождения подходящего значения и последующего обновления с другой входной переменной - PullRequest
0 голосов
/ 17 февраля 2020

Допустим, у меня есть класс c publi GameBoard, который будет двумерным массивом с 4 строками и 5 столбцами. Пробелы в массиве заполнены значениями String от 1 до 20. Будет разыграна карточка с именем (например, King of Spades). Если пользователь введет 15, я сохраню его в переменной String с именем userLocation. Каков был бы наиболее эффективный способ создать метод, который будет принимать входное местоположение и обновлять массив именем карты? Будет ли для l oop наиболее эффективным?

public GameBoard() {
    square  = new String[4][5];
    square[0][0] = new String("1");
    square[0][1] = new String("2");
    square[0][2] = new String("3");
    square[0][3] = new String("4");
    square[0][4] = new String("5");
    square[1][0] = new String("6");
    square[1][1] = new String("7");
    square[1][2] = new String("8");
    square[1][3] = new String("9");
    square[1][4] = new String("10");
    square[2][1] = new String("11");
    square[2][2] = new String("12");
    square[2][3] = new String("13");
    square[3][1] = new String("14");
    square[3][2] = new String("15");
    square[3][3] = new String("16");
    square[2][0] = new String(17);
    square[3][0] = new String(18);
    square[2][4] = new String(19);
    square[3][4] = new String(20);

}

Мой предпочтительный метод на данный момент будет выглядеть примерно так, но он дает мне код ошибки "несоответствие типов: невозможно преобразовать строку в логическое значение" под userLocation = board[i][j]

public String[][] updateBoard(String userLocation, Card card, String[][] board) {

    for (int i = 0; i <4; i++)
        {
           for (int j = 0; j < 5; j++)
           {
             if(userLocation = board[i][j]) {

                 board[i][j] = card.name;

             }
           } 
        } 

    return board;

}

1 Ответ

1 голос
/ 17 февраля 2020

Таким образом, причина, по которой он не скомпилируется, заключается в том, что your = не возвращает логическое выражение. == будет, но это все-таки не то, что вам нужно, поскольку вы хотите проверить, одинаковое ли содержимое String, а не один и тот же объект, поэтому используйте .equals.

Но, нет, я думаю, что вы не хотите зависеть от строк для определения местоположения. Что делать, если вы хотите заменить карту? И зачем просматривать все, когда вам это не нужно?

Скорее, если я какое-то число от 1 до 20, определите соответствующую точку в массиве с помощью square[(i-1)/5][(i-1)%5]

Это должно обойти проблему, которую вы с соответствующими строками.

Так, например, ваш конструктор становится:

public GameBoard() {
square  = new String[4][5];
for (int i=1; i<=20;i++){
    square[(i-1)/5][(i-1)%5]=""+i;//initialize with 1 to 20 if you like
}

и userLocation является int.

...