#java #arrays #for-loop #multidimensional-array
#java #массивы #for-цикл #многомерный массив
Вопрос:
Я просто освежаю свои навыки Java, потому что прошло некоторое время с тех пор, как я кодировал. Я просмотрел многие сообщения моего вопроса и обнаружил, что, насколько я могу судить, я, кажется, сравниваю все правильно. Я сравниваю два элемента 2d-массива друг с другом, и если они совпадают, я заменяю символ в элементе, однако, похоже, он просто выходит за рамки при попытке их сравнения. Не вижу ошибки out of bounds (строка 48).
char[][] board = new char[3][3];
char[][] player1 = new char[1][1];
char[][] player2 = new char[1][1];
int playerRow = 0;
int playerCol = 0;
Scanner kbd = new Scanner(System.in);
System.out.println("Lets play a simple game of tic-tac-toe");
System.out.println("Player 1 (X's) : Please enter a row number and column number ");
System.out.println(" in order to plot the cordinates of your desired move");
playerRow = kbd.next().charAt(0);
playerCol = kbd.next().charAt(0);
for(int row = 0; row < board.length; row )
{
for(int col = 0; col < board[row].length;col )
{
if (board[row][col] == player1[playerRow][playerCol])
{
board[row][col] = 'X';
System.out.print(board[row][col] " ");
}
else
{
board[row][col]= '-';
System.out.print(board[row][col] " ");
}
}
System.out.println();
}
Комментарии:
1. Вы сравниваете a
char
с anint
. Это допустимое сравнение, но, вероятно, оно не делает того, что вы хотите. Например,'1'
(char) — это не то же самое, что1
(int) .2. упс. о боже, я просматриваю это примерно 45 минут.
3. Я изменил это, однако он продолжает выдавать мне ошибку с индексом массива вне границ, я сделал массивы игровых массивов символьными массивами. это нормально? @resueman
4. кроме того, вы объявляете массивы символов и инициализируете массивы int
5. У вас есть трассировка стека ошибки, которую вы могли бы опубликовать?
Ответ №1:
Похоже, что ваш код использует неправильный подход к решению этой проблемы. Если я не понимаю вашу цель, я не думаю player1
, player2
что это необходимо. Все должно храниться только внутри board
. Вот пример того, как это может выглядеть:
//initialize variables
char[][] board = new char[3][3];
int playerRow = 0;
int playerCol = 0;
//clear the board
for(int row = 0; row < board.length; row ){
for (int col = 0; col < board[row].length; col ){
board[row][col] = '-';
}
}
Scanner kbd = new Scanner(System.in);
System.out.println("Lets play a simple game of tic-tac-toe");
System.out.println("Player 1 (X's) : Please enter a row number and column number ");
System.out.println(" in order to plot the cordinates of your desired move");
//get player's row and column
playerRow = kbd.nextInt();
playerCol = kbd.nextInt();
//Change the chosen spot to be the player's character.
board[playerRow][playerCol] = 'X';
//Display the board
for(int row = 0; row < board.length; row ){
for(int col = 0; col < board[row].length;col ){
System.out.print(board[row][col] " ");
}
System.out.println();
}
Это пример одного хода, который позволяет игроку выбрать место, а затем отображает доску.
Причина ошибки, которую вы сейчас получаете, заключается в том, что вы читаете символ '0'
, а затем пытаетесь использовать его в качестве индекса в массиве. Но '0'
это не то же самое, что 0
; на самом деле это значение unicode, представляющее символ 0
, который, оказывается, имеет значение 48
, которое не является допустимым индексом в вашем массиве. Вы должны принять этот ввод как целое число, а затем просто установить это значение в массиве (без циклов для поиска правильного места).
Комментарии:
1. Спасибо всем, особенно resueman и @vergeA. Я всегда склонен сворачивать свои программы, преследуя кроличью нору исправлений, наложенных друг на друга. Я был буквально там, где мне нужно было быть, но не мог этого видеть. Спасибо, ребята. очень люблю всех.
Ответ №2:
Ваши 2-мерные массивы player (i) предполагают присвоение 2-мерного массива символов целочисленному 2-мерному массиву.
char[][] player1 = новый int[board.length][board.length]; char[][] player2 = новый int[board.length][board.length];
Я не думаю, что это выполнимая инициализация.
Также, как упоминалось в приведенных выше комментариях, вы сравниваете char с int . Следовательно, он пытается сравнить целочисленное значение ваших символов со значениями сравниваемых переменных.
Комментарии:
1. Извините, это ошибка в коде. исправлены, ошибка все еще возникает.
2. Ваша плата — это 3*3 2- D массив, в то время как игроков всего 1 * 1, и, следовательно, это выходит за рамки.
3. Да, для меня это имеет смысл, в чем моя логическая ошибка здесь?
4. Я попытался сделать их 3 на 3, и это все равно выйдет за рамки.
5. Он не обращается к массивам плееров
row
, иcol
это не проблема