数组超出界限2D数组中的异常 - 我该如何避免这种情况?

时间:2015-04-16 00:42:17

标签: java arrays

我是Java的初学者,我正在编写一个解决迷宫的程序,作为一项任务。现在,我正在努力寻找从cvs文件中读取迷宫的部分可能非常愚蠢,但我无法修复它。

由于某种原因,我对“ArrayOutOfBounds”这一行提出了while (info[x] != null) {异常。我需要检查数组元素是否为空以便我的程序运行,但它不起作用。有什么想法吗?

public class Project5v2 
{

static String mazecsv = "/Users/amorimph/Documents/COMP 182/Project 5/mazeinput.csv";
static File solvedMaze = new File("/Users/amorimph/Documents/COMP 182/Project 5/solvedMaze.txt");
static int[][] maze = new int[50][50];
static int trigger = 0;
static int mazeWidth;
static int mazeHeight;

public static void main(String[] args) {

    readCSV(mazecsv);
    start(maze);
    mazeToString(maze);

}

public static void readCSV(String csvfile) {

    BufferedReader br = null;
    String line = "";
    String csvSplitBy = ",";
    int x = 1;
    int y = 0;


    try {

        br = new BufferedReader(new FileReader(csvfile));
        br.readLine();

           while ((line = br.readLine()) != null) {

               String[] info = line.split(csvSplitBy);

               while (info[x] != null) {                       
                   maze[x][y] = Integer.parseInt(info[x]);
                   x++;
                   mazeWidth = x;
               }
               y++;
               x = 1;
               mazeHeight = y;

           }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

将其更改为for loop

while (info[x] != null) {                       
      maze[x][y] = Integer.parseInt(info[x]);
      x++;
      mazeWidth = x;
}

为:

for (int x = 0; x < info.length; x++) {                       
      maze[x][y] = Integer.parseInt(info[x]);
}
mazeWidth = info.length;

这假设info不会大于50,这是您为maze定义的尺寸。如果不能保证,那么

for (int x = 0; x < info.length && x < maze.length; x++) {

答案 1 :(得分:0)

你在该行上收到错误,因为没有什么可以阻止x递增到迷宫中最大行值的数字。因此,如果你想保持while循环,你可以做的一件事就是增加另一个条件。

只需将此添加到您的while循环中,IFF您需要或想要保持一段时间。

while(info[x] != null && x < maze.length)
{
     //magicalness
}

附加布尔语句通过确保x不大于2D数组中的行数或名为info的数组长度来防止OutOfBounds错误。