我一直在试图弄清楚为什么我的错误已经持续了近3个小时,而且在我的电脑付出代价之前我需要一些帮助来解决这个问题。
我一直收到这个错误
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 13
at StarsTable.checkIfStar(StarsTable.java:102)
at Stars.main(Stars.java:20)
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
public class StarsTable
{
private ArrayList<Integer> a = new ArrayList<Integer>();
private String title;
private String readLine = null;
private int rows = 0;
private Integer array[][];
public StarsTable( String fileName)
{
try
{
BufferedReader br = new
BufferedReader(new FileReader( fileName));
title = br.readLine();
while(( readLine = br.readLine()) != null)
{
System.out.println(readLine);
addArray(readLine);
rows++;
}
br.close();
}
catch(IOException e)
{
System.err.println("File Not Found. Please "
+ "enter filename in command line.");
System.exit(1);
}
}
public String title()
{
return title;
}
public void addArray(String readLine)
{
int i = 0;
String[] splitLine = readLine.split("\\s+");
for(i = 0; i < splitLine.length; i++)
{
a.add(Integer.valueOf(splitLine[i].trim()));
}
}
public Integer[][] getArray()
{
toArray();
return array;
}
public void toArray()
{
array = new Integer[rows][a.size() / rows];
int g = 0;
for (int i = 0; i < rows; i++)
{
System.out.println();
for (int k = 0; k < (a.size() / rows); k++)
{
array[i][k] = a.get(g);
System.out.print(array[i][k] + " ");
g++;
}
}
}
public int checkIfStar(int i, int k)
{
Integer check = 0;
// Top Left Corner
if (i == 0 && k == 0)
check = array[i][k] + array[i+1][k] + array[i][k+1];
// Top Right Corner
else if (i == a.size() / rows && k == 0)
check = array[i][k] + array[i-1][k] + array[i][k+1];
// Bottom Left Corner
else if (i == 0 && k == array.length)
check = array[i][k] + array[i][k-1] + array[i+1][k];
// Bottom Right Corner
else if (i == array[0].length && k == array.length)
check = array[i][k] + array[i-1][k] + array[i][k-1];
// Top Row
else if ((i != 0 && i != array[k].length) && k == 0)
check = array[i][k] + array[i-1][k] + array[i+1][k] + array[i][k+1 ];
// Bottom Row
else if ((i != 0 && i != array[k].length) && k == array.length)
check = array[i][k] + array[i-1][k] + array[i][k-1] + array[i+1][k];
// Left Side
else if(i == 0 && k != 0 && k != array.length)
{
System.out.println(i + " " + k);
This is where the error is. check = array[i][k] + array[i+1][k] + array[i][k-1] + array[i][k+1];
}
// Right Side
else if(i == array[k].length && k != 0 && k !=array.length)
check = array[i][k] + array[i-1][k] + array[i][k-1] + array[i][k+1];
else
check = array[i][k] + array[i+1][k] + array[i-1][k] + array[i][k+1] + array[i][k-1];
check = check / 5;
if (check < 5)
return 0;
else
return 1;
}
}
正在读取的文件类型如下所示
Title Line
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
每个文件的行数和每行的行数是未知的,并且通过命令行使用主程序读取文件。
答案 0 :(得分:1)
您可能需要== array.length -1
而非== array.length
,因为array.length
比最大索引多1个。这可能也适用于a.size()
,不确定。
答案 1 :(得分:1)
array.length为您提供数组的长度。但是数组从索引0开始,因此数组的最后一个索引将是array.length - 1。
因此,您的测试应该是:
k == array.length - 1
你的checkIfStar方法中的