Stars.java arrayindexoutofbounds

时间:2014-04-22 06:43:16

标签: java indexoutofboundsexception

我一直在试图弄清楚为什么我的错误已经持续了近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

每个文件的行数和每行的行数是未知的,并且通过命令行使用主程序读取文件。

2 个答案:

答案 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方法中的