我是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();
}
}
}
答案 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错误。