Я пишу код игры. Доска этой игры размером 10х10. В начале я написал эту доску в виде двумерного целочисленного массива. Теперь я должен заменить некоторые места на доске буквами. Он будет меняться с буквами в соответствии с координатами, введенными игроком.

private static int[][] board = new int[10][10]; //board

StringBuilder sb = new StringBuilder();
    for (int[] array : board) {
        sb.append('\n').append(Arrays.toString(array));
    }
    String new = sb.toString(); //I tried to convert this way

if (new[x][y].equals("r")){
    new[x][y] = "d"; //I'm getting an error in this part.
}
-1
user13651871 31 Май 2020 в 12:05

3 ответа

Лучший ответ

Попробуйте использовать массив 2D String, скопировав данные из массива 2D int.

int[][] board = new int[10][10]; //board

//Converting int array to String array
String[][] s = new String[board.length][];
for(int i = 0; i < board.length; i++){
    s[i] = new String[board[i].length];
    for(int j=0; j<board[i].length; j++){
        s[i][j] = Integer.toString(board[i][j]); 
    }
}

if (s[x][y].equals("r")){
    s[x][y] = "d"; 
}
0
Sreejith 31 Май 2020 в 09:55

Я бы порекомендовал вам не использовать int в качестве типа данных массива. Возможно, используйте String, и вы можете использовать Integer.parseInt(x) для извлечения целого числа из записи массива. Если ваши числа состоят из одной цифры, лучше использовать char.

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

0
Richard Yan 31 Май 2020 в 09:15

В вашем коде есть две основные проблемы:

  1. Вы использовали new в качестве имени переменной, что недопустимо, поскольку new является зарезервированным словом, используемым для создания экземпляра.
  2. Следующее утверждение не создает двумерный массив строк:

    String s = sb.toString();
    

    Следовательно, ваша попытка получить доступ к / set s[x][y] приведет к ошибке компиляции.

< STRONG> Рекомендация :

  1. Используйте String[][] вместо int[][]. String[][] сможет хранить строки, состоящие из букв (а), а также целых чисел, представленных в виде строки (которую вы всегда можете проанализировать с соответствующим целым числом, используя Integer::parseInt, если это необходимо).
  2. Создайте другой массив типа String[][] и скопируйте в него элементы вашего массива int[][].

    Я бы пошел с первым.

0
Arvind Kumar Avinash 31 Май 2020 в 11:24