java - What's causing my stackoverflowerror in my maze solver? -


i have solve maze using recursion , going fine until ran program , ran stackoverflowerror. i've read couple other questions on site , it's because of infinite recursion none of issues seem exact same mine.

my netid_maze.java file

import java.util.random;  public class netid_maze {  int exitrow,     entrancerow; char[][] map = null;   // method name  : maze (constructor) // parameters  : none // partners  : none // description  : no parameter constructor maze public netid_maze() {     // omitted code generating random maze      setentrancerow(rnger.nextint(row - 2) + 1);     setexitrow(rnger.nextint(row - 2) + 1);      map[getentrancerow()][0] = '.';     map[getexitrow()][column - 1] = '.';   } // end netid_maze (without parameters)   // method name  : maze (constructor) // parameters  : exittemp (int), entrancetemp(int), maptemp (char[][]) // partners  : none // description  : parameter constructor maze public netid_maze(char[][] maptemp, int exittemp, int entrancetemp) {      map = maptemp;     exitrow = exittemp;     entrancerow = entrancetemp;  } // end netid_maze (with parameters)   // method name  : getcell // parameters  : row (int), column (int), character in cell (character) // partners  : none // returns : character in cell that's being called (character) // description  : returns character of cell that's being called public char getcell(int r, int c) {     return map[r][c];  } // end getcell()  // method name  : setcell // parameters  : row (int), column (int), character in cell (character) // partners  : none // returns : none // description  : changes character of cell that's being called public void setcell(int r, int c, char val) {     this.map[r][c] = val;  } // end setcell()  public int getentrancerow () {     return entrancerow; }  public int getexitrow() {     return exitrow; }  public void setentrancerow(int entrancetemp) {     entrancerow = entrancetemp; }  public void setexitrow(int exittemp) {     exitrow = exittemp; }  public int getrows() {     return map.length; }  public int getcolumns() {     return map[1].length; }  public boolean isexit(int r, int c) {     boolean isexit = false;      if (getexitrow() == r && map[1].length - 1 == c)     {         isexit = true;     }      return isexit; }  public boolean isentrance(int r, int c) {     boolean isentrance = false;      if (getentrancerow() == r && 0 == c)     {         isentrance = true;     }      return isentrance; }  public boolean isopen(int r, int c) {      boolean isopen = true;      if (r < 0 || c < 0 || r >= getrows() || c >= getcolumns())     {         isopen = false;     }     else if (map[r][c] == '.')     {         isopen = false;     }      return isopen; }  } 

and netid_mazesolver.java file

public class netid_mazesolver { int steps = 0; netid_maze maze = new netid_maze();  public netid_mazesolver(netid_maze mazetemp) {     setsteps(0);     maze = mazetemp; }  public boolean solvemaze(int r, int c) {     //finding whether current cell outside maze     if (r < 0 || c < 0 || r >= maze.getrows() || c >= maze.getcolumns())      {         return false;     }      //finding whether current cell exit     if (maze.isexit(r,c) == true)     {         return true;     }      //finding whether current cell not open     if (maze.isopen(r,c) == false)     {         return false;     }      //setting current cell part of solution path       //finding out whether solve maze(cell below current) == true     if (solvemaze(r - 1,c) == true)     {         return true;     }      //finding out whether solve maze(cell right of current) == true     if (solvemaze(r,c + 1) == true)     {         return true;     }      //finding out whether solve maze(cell left of current) == true     if (solvemaze(r,c - 1) == true)     {         return true;     }      //finding out whether solve maze(cell above current) == true     if (solvemaze(r + 1,c) == true)     {         return true;     }      //setting current cell not part of solution path       return false;  }  public void setsteps(int stepstemp) {     steps = stepstemp; }  public int getsteps() {     return steps; }  } 

the actual error keeps repeating: @ netid_mazesolver.solvemaze(netid_mazesolver.java:53) @ netid_mazesolver.solvemaze(netid_mazesolver.java:71)

the basic mistake made, don't set flags visited cells. due this, algorithm can visit same cell again , again. if generated maze contains cycles, you're pretty end in endlessloop causing stackoverflow. , btw, don't need, write if(maze.isopen(r , c) == true). if(maze.isopen(r , c)) gives same result less code.


Comments

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

gradle error "Cannot convert the provided notation to a File or URI" -

python - NameError: name 'subprocess' is not defined -