Как я могу исправить эту ошибку ?: Исключение в потоке "main" java .lang.ArrayIndexOutOfBoundsException: 3 - PullRequest
1 голос
/ 01 мая 2020

Я работал над этим кодом несколько часов и не могу понять эту часть. Предполагается, что это будет игра ti c ta c toe, и где-то я ошибся в своем 2d массиве, так как постоянно получаю эту ошибку. Я также мог бы использовать справку о том, как получить генератор случайных чисел, чтобы найти определенные c строку и столбец.

Вот мой код:

import java.util.Scanner;
import java.util.Random;

public class TicTacToe
{
    public static void main (String[] args)
    {
        Scanner r = new Scanner (System.in);
        int rows = 3;
        int col = 3;
        int [][] grid = new int [rows][col];

        fillGrid(grid);
        computerTurn(grid);


    }//end main


    public static void fillGrid(int [][] grids)
    {

        //int [][] grids = new int [3][3];

        for (int r = 0; grids.length < 3; r++)
        {
            for(int c = 0; grids[r].length < 3; c++)
            {
                grids[r][c] = 0;
            }
        }
        printGrid(grids);

    }

    public static void printGrid (int [][] x)
    {
        for (int i = 0; i < x.length; i++)
        {
            for (int y = 0; y < x[0].length; y++)
            {
                System.out.print (x[i][y] + "\t");
            }
            System.out.println();
        }
    }


    public static void computerTurn (int [][] mygrid)
    {
        Random random = new Random();
        int rows = 3;
        int col = 3;

        //int [][] grid = new int [rows][col];
        //mygrid [rows][col] = random.nextInt(4);
        for (int r = 0; r < 3; r++)
        {
            for (int c = 0; c < 3; c++)
            {

                //mygrid [rows][col] = random.nextInt(2);
                if (mygrid [r][c] == 0)
                {
                    //mygrid [r][c] = random.nextInt(3);
                    mygrid [rows][col] = 1;
                }

                /*if (mygrid [r][c] != 0)
                {
                    //mygrid [rows][col] = random.nextInt(3);
                    mygrid [r][c] = 1;
                }*/


            }
        }

        printGrid(mygrid);
    }   
}

1 Ответ

2 голосов
/ 01 мая 2020

Было бы полезно узнать, по какой линии вы бросаете indexOutOfBoundsException. Из : 3 в конце исключения мы можем знать, что где-то в вашем коде someArr[3] ссылается на массив, несмотря на someArr.length < 4.

Ваше условие завершения для вложенного l oop в fillGrid есть некоторые проблемы:

for (int r = 0; grids.length < 3; r++)
/* Loop never enters, because grids.lengh = 3 */
        {
            for(int c = 0; grids[r].length < 3; c++)
            /* Loop also never enters, because grids[r].length = 3 */
            {
                grids[r][c] = 0;
            }
        }

Я думаю, вы хотите иметь:

for (int r = 0; r < grids.length; r++)
        {
            for(int c = 0; c < grids[r].length; c++)
            {
                grids[r][c] = 0;
            }
        }

Я также предлагаю заменить ваш l oop в computerTurn на операторы завершения, такие как таким образом, метод поддерживает массивы любой длины.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...