Abit坚持为什么我不能让这个工作:/

时间:2017-04-02 11:06:06

标签: java

public class Robot
{
    public static void main(String []args){

        ArrayList<String> list = new ArrayList<String>();
        String path = "";
        int N = 2;
        int ol1_right = 1; 
        int ol1_down = 1;
        int ol2_right = 1; 
        int ol2_down = 1;
        buildPath (right, down, path, allPaths, N);
        System.out.println (allPath(grid));

    }

    public void BuildPath (int right, int down, String path, 
        ArrayList<String> allPaths, int N){
            path += "(" + down "," + right + ")->";
            if (right == N-1 && down == N-1){
                allPaths.add(path);
                return;
            }
            else if (right +1 == ol1_right && down == ol1_down) && (right +1 == 
            ol2_right && down == ol2_down);{
            return;
            }
            if (right +1 == ol1_right && down == N-1) || (right +1 == ol2_right
            && down == N-1);{
            return;
            }
            if (right == N-1 && down +1 == ol1_down) || (right == N-1 && down +1
            == ol2_right);{
            return;
            }
            if (right == N-1 || right +1 == ol1_right && down == N-1 || 
            right +1 == ol2_right && down == N-1){
                BuildPath (right, down + 1, path, allPaths, N);
            }
            else if (down == N-1 || right +1 == ol1_right && down == ol1_down && right +1 == 
            ol2_right && down == ol2_down ){
                BuildPath (right + 1, down, path, allPaths, N);
            }
            else 
            BuildPath (right + 1, down, path, allPaths, N);
            BuildPath (right, down + 1, path, allPaths, N);
    }
}

对不起,我仍然对这种事情感到陌生,并且我坚持试图让这个程序工作,但有点坚持下一步去哪里。我得到错误,例如&#34;非法开始表达&#34; (使用||和&amp;&amp;)或&#34时抛出;不是声明&#34; (路径+ =&#34;(&#34; +向下&#34;,&#34; +右+&#34;) - &gt;&#34 ;;)所有我想做的就是得到(机器人)沿着网格移动,同时只向下和向右移动,但也有能力将网格的某些部分标记为禁止。任何帮助都会非常感激,我知道这一切都看起来很可怕但只是试图弄清楚这对于任何新手错误或愚蠢的错误仍然是非常新的抱歉:)

2 个答案:

答案 0 :(得分:0)

对于Main()中的初学者来说,有很多问题

int ol1_right = 1; 
int ol1_down = 1;
int ol2_right = 1; 
int ol2_down = 1;

您声明并初始化但后来尝试从BuildPath()访问而不将它们作为参数传递。你不能那样做,因为在Java中,变量的范围仅限于它定义的块,除非你另有说明。

在您的情况下,您可能需要将这四个变量移动到BuildPath()本身。再说一遍,你似乎永远不会改变它们,所以我会在所有这些中改变它们。

此外,list似乎没有被使用,所以它可能是多余的。

不是Java人,我没有编译器方便地告诉你到底出了什么问题。尝试制作一个新文件并一次添加一些代码,看看编译器抱怨什么。

如果可以的话,在我不知道Java语法的情况下,如果你正在进行递归,那么我认为你已经超越了自己。我会集中精力学习至少基础知识。

答案 1 :(得分:0)

从我看到的(以及我的IDE给出的代码的错误), 你有一些基本的编译问题。

在方法 main(String [])中,引用此行:

buildPath (right, down, path, allPaths, N);

您尚未定义变量&#34;右&#34;,&#34; down&#34;,&#34; allPaths&#34;在主要。这些是 BuildPath(int,int,String,ArrayList,int)中参数的内部名称,您不能从外部使用它们的名称。

BuildPath(int,int,String,ArrayList,int)中发生的事情也是如此,你不能使用&#34; ol1_right&#34;,&#34; ol1_down&#34 ;因为它们仅在 main(String [])中定义。

另一个单独的问题是这一行:

path += "(" + down "," + right + ")->";

向下后添加 +

另一个问题是if语句中的分号:

else if (right +1 == ol1_right && down == ol1_down) && (right +1 == 
    ol2_right && down == ol2_down);{

应该(删除; 并添加外部 ):

else if ((right +1 == ol1_right && down == ol1_down) && (right +1 == 
    ol2_right && down == ol2_down)) {