can someone tell me why my recursive function gives me a StackOverflowError?
I researched myself and found out, that I may need to add more memory to my Stack, but I need an solution without increasing the memory.
I already tried to change the code to not always creating a new Hashset, but that didn't work either.
public Set<Tile> reachable() {
Set<Tile> output = new HashSet<>();
output.add(this);
for (Direction d : Direction.values()
) {
if (this.oneStep(d) != null) {
output.addAll(this.neighborTile(d).reachable(d.reverse()));
}
}
return output;
}
public Set<Tile> reachable(Direction comesFrom) {
Set<Tile> output = new HashSet<>();
output.add(this);
for (Direction d : Direction.values()
) {
if (this.oneStep(d) != null && d != comesFrom) {
output.addAll(this.neighborTile(d).reachable(d.reverse()));
}
}
return output;
}
It is accessed via:
@Test
public void testReachable() {
assertEquals(IntStream.of(0, 1, 2, 3, 4, 7, 9, 10, 11, 14, 16, 17)
.mapToObj(tiles::get)
.collect(Collectors.toSet()),
maze.getTile(0, 0).reachable());
assertEquals(IntStream.of(26, 27, 33, 34, 41, 47, 48)
.mapToObj(tiles::get)
.collect(Collectors.toSet()),
maze.getTile(6, 6).reachable());
}
But I am not allowed to change the testing code.
thanks in advance! :)
Error:
java.lang.StackOverflowError
at java.base/java.util.HashMap.putVal(HashMap.java:652)
at java.base/java.util.HashMap.put(HashMap.java:607)
at java.base/java.util.HashSet.add(HashSet.java:220)
at maze.Tile.reachable(Tile.java:104)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
at maze.Tile.reachable(Tile.java:108)
...
Process finished with exit code -1
Aucun commentaire:
Enregistrer un commentaire