0

我一直在为我的 CS 课做实验作业,我必须填写讲师提供给我的方法,我已经到了可以导航到数组中的一个点并标记方向的地步搬进来,但它只适用于某些位置,即使我可以看到一条清晰的路径。

例如,如果我输入 8,2 它发现路径就好了

这是一张照片:

在此处输入图像描述

但是如果我输入显然可以通过的点 8,3,我会得到一个溢出,我的程序只是在第 24 行和第 35 行之间来回跳转

如果有人对我哪里出错有任何想法,我将不胜感激一些提示!感谢大家

public char[][] findPath(int startRow, int startCol, int destRow, int destCol,  int threshold){

    if((startRow==destRow)&&(startCol==destCol)){
        JOptionPane.showMessageDialog(null, "A path has been found!");
        map[destRow][destCol] = '^';

        return map;

        }

    else if(startRow < 9 && checkIfPassable(startRow + 1, startCol, threshold)){
        map[startRow][startCol]= 'S';
        startRow++;
        return findPath( startRow,  startCol, destRow, destCol, threshold);

        }
    else if(startCol < 9 && checkIfPassable(startRow , startCol + 1, threshold)){
        map[startRow][startCol]= 'E';
        startCol++;
        return findPath( startRow,  startCol, destRow, destCol, threshold);
     }
    else if(startRow > 1 && checkIfPassable(startRow -1, startCol, threshold)){
        map[startRow][startCol]= 'S';
        startRow--;
        return findPath( startRow,  startCol, destRow, destCol, threshold);

        }
    else if(startCol > 1 && checkIfPassable(startRow , startCol -1, threshold)){
        map[startRow][startCol]= 'E';
        startCol--;
        return findPath( startRow,  startCol, destRow, destCol, threshold);
     }



    System.exit(1);
    return map;

}
4

2 回答 2

0

您的搜索算法需要更加系统化。在写这篇文章时,你只会绕着圈子直到溢出堆栈。你需要确保你不会回溯到你已经访问过的空间。

在风格上,如果您要使用递归实现,您应该制作所有方法参数final,并且只使用+1or-1进行递归调用的位置,而不是在递归调用之前使用++or --,这样就很清楚了递归调用递归的方式。此外,在计算中打开对话框或杀死应用程序通常是不好的形式。System.out.println如果您想要关于代码正在做什么的反馈,请使用或日志库。

于 2013-09-22T00:39:49.367 回答
0

提示:您应该尝试自己调试:

  • 使用附加的调试器运行程序。(由于您使用的是 Eclipse,这很容易做到。其他 IDE 同上。否则,请查看 Oracle 文档jdb- http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/jdb .html )

  • 设置断点以在适当的位置停止程序。

  • 程序递归时单步执行,检查局部变量和相关map单元格的状态。

  • 确定它的行为与您的预期有何不同。

  • 修改你的算法。


现在我们可以尝试找出问题所在,但您没有向我们展示足够多的代码。更重要的是,你需要学会自己做这件事!

于 2013-09-22T00:25:23.247 回答