我是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)
答案 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);
}
}
}