Привет, ребята, я работаю над программой для университетского курса, которая использует метод get_line() для рекурсивного вычисления списка последовательных местоположений для перехода от одной точки к сетке к другой. Когда я запускаю его, я получаю переполнение стека в строке последнего оператора return в методе. Мне было интересно, могу ли я кого-то еще посмотреть на этот метод и посмотреть, не кажется ли что-то совершенно неправильным. метод приводится ниже:java stackoverflow error
Благодарим за помощь!
местоположение - это объект, содержащий строку r и столбец c.
private Vector<location> get_line(location from, location to) {
location nextLoc = new location();
Vector<location> loc = new Vector<location>();
Random r = new Random();
if(to.r == from.r && to.c == from.c) {
return(loc);
} else {
if(to.r > from.r && to.c > from.c) {
nextLoc.r = from.r + 1;
nextLoc.c = from.c + 1;
} else if(to.r < from.r && to.c < from.c) {
nextLoc.r = from.r - 1;
nextLoc.c = from.c - 1;
} else if(to.r < from.r && to.c > from.c) {
nextLoc.r = from.r - 1;
nextLoc.c = from.c + 1;
} else if(to.r > from.r && to.c < from.c) {
nextLoc.r = from.r + 1;
nextLoc.c = from.c - 1;
} else if(to.r == from.r && to.c > from.c) {
if(r.nextInt(2) == 0) {
nextLoc.r = from.r + 1;
} else {
nextLoc.r = from.r - 1;
}
nextLoc.c = from.c + 1;
} else if(to.r == from.r && to.c < from.c) {
if(r.nextInt(2) == 0) {
nextLoc.r = from.r + 1;
} else {
nextLoc.r = from.r - 1;
}
nextLoc.c = from.c - 1;
} else if(to.r < from.r && to.c == from.c) {
nextLoc.r = from.r - 1;
if(r.nextInt(2) == 0) {
nextLoc.c = from.c + 1;
} else {
nextLoc.c = from.c - 1;
}
} else if(to.r > from.r && to.c == from.c) {
nextLoc.r = from.r + 1;
if(r.nextInt(2) == 0) {
nextLoc.c = from.c + 1;
} else {
nextLoc.c = from.c - 1;
}
}
loc.add(nextLoc);
return(get_line(nextLoc,to)); //stack overflow error occurs here.
}
}
Вы должны повторить это и добавить тег домашней работы, чтобы быть более откровенным. –
В Java принято использовать все имена классов, начинающиеся с символа верхнего класса; «location» больше походил на переменную для меня, чем класс, пока я не ударил по психическому segfault и вернулся, чтобы осмотреть его более внимательно. Никогда не недооценивайте силу конвенции! –
Я не знал, что есть домашняя бирка, и как это полезно для тех, кто пытается ответить на вопрос о программировании? Кроме того, первое предложение в моем вопросе: «Привет, ребята, я работаю над программой для ** университетского курса **» – seventeen