我的Java程序 - 查找路径 - 不输出任何内容

时间:2015-09-22 18:29:24

标签: java

我写了一个递归程序来打印点之间的路径,但不打印任何东西!

public static void find(int a, int b, int [][] myArray) 
    {
        System.out.print("thisWay " + a + " ");
        if (myArray[a][b] != 0) 
        {
            int point = myArray[a][b];
            find(a, point, myArray);
            System.out.print("thisWay " + point + " ");
            find(point, b, myArray);
        }
        System.out.print("thisWay " + b + " ");
    }

这是我的主要内容;

public static void main(String[] args) 
    {   
        int[][] myArray = new int[][]
        {
           {7, 0, 0, 8, 7, 8, 3, 0, 7},
           {7, 0, 7, 0, 7, 8, 0, 2, 7},
           {0, 4, 5, 1, 1, 8, 0, 1, 5},
        };
        find(2, 4, myArray);
    }

4 个答案:

答案 0 :(得分:1)

您需要检查此点是否超出数组边界,然后检查此点是否不等于零。 像这样的东西:

public class Main  {
      static int x=0;
public static void find(int a, int b, int [][] myArray) throws InterruptedException 
{
    System.out.println("thisWay " + a + " ");
    if (myArray.length>a&&(myArray[0].length>b&&myArray[1].length>b&&myArray[2].length>b)&&myArray[a][b] != 0&&x<100) 
    {
            x++;
        int point = myArray[a][b];
        find(a, point, myArray);
        System.out.print("thisWay " + point + " ");
        find(point, b, myArray);
    }else{
    System.out.print("thisWay " + b + " ");
    }
}
public static void main(String[] args) throws InterruptedException 
{   
    int[][] myArray = new int[][]
    {
       {7, 0, 0, 8, 7, 8, 3, 0, 7},
       {7, 0, 7, 0, 7, 8, 0, 2, 7},
       {0, 4, 5, 1, 1, 8, 0, 1, 5},
    };
    System.out.println(myArray.length);
    find(1, 2, myArray);
}
}

答案 1 :(得分:1)

stdout的I / O通常是缓冲的,可以阻止输出立即显示(stderr isn&t; t),PrintStream '\n'实例System.out.print("some text...\n")通常也是行缓冲的。

刷新缓冲区的最简单方法通常是打印System.out.println("some text...")(例如scanffscanf(inputFile,"%d",&grades[i][j]);

答案 2 :(得分:1)

尝试使用System.out.println()而不是所有System.out.print()语句,将其刷新到控制台。

除此之外,你应该注意两件事:

  • 数组边界检查

    如果a = 2,则b = 5 =&gt; point = 8,下次调用你将尝试myArray [8] [5],它应该给出一个ArrayIndexOutOfBoundsException

    Sol:将数组的边界作为params发送到find方法,并检查a和b是否在该边界内

  • 递归级别检查

    你的程序有可能只是在该数组中无限循环搜索,所以你可能会在同一点获得StackOverflow异常

    Sol:添加一个参数depth,指定&#34; deep&#34;你想以递归方式递归,在每次递归调用时递减它,每次你输入find()方法时都要检查它是> 0

答案 3 :(得分:0)

当我运行你的代码时,我得到一个java.lang.StackOverflowError,但它至少会打印出值,直到它出现错误。 System.out可能正在您的系统上缓冲。每次打印后调用System.out.flush()来刷新它。