2015-03-01 3 views
0

Я работаю над роботом, чтобы двигаться через лабиринт, который всегда пытается двигаться вправо, если он не может двигаться вправо, он будет идти прямо, если он не сможет пойдите прямо, он попытается пойти влево, а затем, наконец, он вернется, если другие варианты недоступны.ArrayIndexOutOfBoundsException Ошибка перемещения робота через лабиринт ASCII

У меня есть несколько разных классов и попытаюсь показать, где ошибка. Я также добавлю полный код в pastebin.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 
    at hw2sp14.Maze.openCell(Maze.java:69) 
    at hw2sp14.RightHandRobot.move(RightHandRobot.java:165) 
    at hw2sp14.MazeDriver.main(MazeDriver.java:42) 

public static void main(String[] args) throws IOException { 
    File inputFile = getFile(); //sample: testmaze.txt 
    Maze maze = new Maze(inputFile); 
    System.out.println(maze); 
    Robot bot = new RightHandRobot(maze);//this ties the robot to the maze it is in 
    System.out.println(maze); 

    for (int k = 0; k < 1000000 && !bot.solved(); k++) 
    //this limits the robot's moves, in case it takes too long to find the exit. 
    { 
     int direction = bot.chooseMoveDirection(); 
     if (direction >=0) //invalid direction is -1 
      bot.move(direction); 
     System.out.println(maze); 
     System.out.println(bot.getFacing()); 
     System.out.println("\n"); 
    } 
} 

public boolean openCell(int row, int col){ 
    boolean open = false; 
    if(currentMaze[row][col] == ' ' && row>=0 && row<numRows && col>=0 && col<numCols){ 
     open = true; 
    } 
    return open; 
} 

Класс RightHandRobot огромен, поэтому я собираюсь положить его в пастабин. http://pastebin.com/WEmzJR7v

Если мне нужно положить полные пасты, я могу по запросу. Спасибо

+0

Вы действительно не показали нам достаточно своего кода. В принципе, 'currentMaze' не имеет записи для' row' и 'col', которые вы передаете этому методу; но поскольку вы не показали нам, где создается 'currentMaze', или какие' row' и 'col', невозможно сказать вам, что вы делаете неправильно. Лучшее, что вы можете сделать, это выполнить свой код с помощью отладчика. Это позволит вам сразу увидеть, что происходит. У меня VTC'ed, потому что вы не смогли дать нам достаточно кода, чтобы воспроизвести проблему. –

ответ

0

Подробнее об условиях и && Оператор. Затем переписать ваше состояние таким образом:

if(row>=0 && row<numRows && col>=0 && col<numCols && currentMaze[row][col] == ' '){ 
    open = true; 
} 

Вы должны проверить row и col, прежде чем вы можете использовать его в качестве индекса массива.

+0

Спасибо! Это заставило его работать! – 007Chill

Смежные вопросы