创建一个数组给了我java.lang.ArrayIndexOutOfBoundsException

时间:2012-02-12 01:51:38

标签: java arrays

我是java的新手,我现在正在编写一个pacman作为一个类项目。游戏是在阵列上进行的[8] [8];我必须阅读.txt文件,其中包括墙,鬼和它们在阵列中的位置,并在那里显示它们。我使用过Scanner,StringTokenizer和nextInt。当我编译文件时,它不会给出任何错误,但是在运行它时,java.lang.ArrayIndexOutOfBoundsException:8会出现;通过错误名称,我可以推断数组外部有一些对象,但我似乎无法确定哪一个。这是代码:

public class JuegoPacman
{
     private Elemento _mat[][];



    public JuegoPacman()
    {

    }



    public void Escanear() throws FileNotFoundException
    {
        Scanner sc=new Scanner(new File("inicio.txt"));
        while(sc.hasNext())
        {
            String token = sc.next();

            if (token.equals("Pared"))
            {
                int i=sc.nextInt() -1;
                int j=sc.nextInt() -1;

                _mat[i][j] = new Pared(i,j);
            }

            else if(token.equals("Fantasma"))
            {
                int i=sc.nextInt();
                int j=sc.nextInt();

                _mat[i][j]= new Fantasma(i,j);
            }
        }
    }

    public void crearMatriz()
    {
        for (int i=0; i<_mat.length;i++)
        {
            for (int j=0;i<_mat[i].length;j++)
            {
                System.out.print(_mat[i][j]);
            }
        }
    }

    public void jugar() throws FileNotFoundException
    {
        _mat=new Elemento[8][8];
        Escanear();
        crearMatriz();
    }
}

这是主要课程:

public class Aplicacion {


    public Aplicacion()
    {
    }


    public static void main(String[] args) throws FileNotFoundException
    {
       JuegoPacman juego = new JuegoPacman();
       juego.jugar();
    }
}

这是我试图阅读的.txt:

Pared 2 2 
Pared 3 2 
Pared 4 2 
Pared 6 2 
Pared 7 2 
Pared 5 4 
Pared 2 5 
Pared 4 5 
Pared 6 5 
Pared 2 6 
Pared 4 6 
Pared 6 6 
Pared 2 7 
Pared 5 7 
Fantasma 1 3
Fantasma 1 8
Fantasma 8 8

事先,非常感谢。

编辑:

每个位置编号的减1中仍然会给我同样的错误。

错误: nullnullFantasma @ a31e1bnullnullnullnullFantasma @ 10da5eb在线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:8     在JuegoPacman.crearMatriz(JuegoPacman.java:58)     在JuegoPacman.jugar(JuegoPacman.java:67)     在Aplicacion.main(Aplicacion.java:22)

2 个答案:

答案 0 :(得分:0)

您输入的文件包含[1,8]范围内的行和列,而您的代码使用[0,7]范围内的行和列(因为数组为0索引)。阅读时,您应该从输入坐标中减去一个。

编辑:

在您的代码中发现了另一个错误:

for (int j=0;i<_mat[i].length;j++)

这应该是

for (int j=0;j<_mat[i].length;j++)

答案 1 :(得分:0)

java中的编号安排从零开始。如果您创建一个包含8个位置的数组,那么位置将从0到7.如果您尝试找到位置8,它将为您提供该错误。

如何修复代码

             int i = sc.nextInt () - 1;
             int j = sc.nextInt () - 1;
必须双方替换

public void Escanear() throws FileNotFoundException
{
    Scanner sc=new Scanner(new File("inicio.txt"));
    while(sc.hasNext())
    {
        String token = sc.next();

        if (token.equals("Pared"))
        {
            int i=sc.nextInt() -1;
            int j=sc.nextInt() -1;

            _mat[i][j] = new Pared(i,j);
        }

        else if(token.equals("Fantasma"))
        {
            int i=sc.nextInt() - 1;
            int j=sc.nextInt() - 1;

            _mat[i][j]= new Fantasma(i,j);
        }
    }
}