Java 使用递归而不是循环打印嵌套数组中的元素

Java 使用递归而不是循环打印嵌套数组中的元素,java,arrays,loops,recursion,Java,Arrays,Loops,Recursion,我一直在尝试打印元素 int[]a={2,-36,98},{21,55},{2,5,4,7,6},{101} 借助递归而不是循环。现在我带了一段代码,但它会打印额外的不需要的元素 public class RecursionDoubleLoop { void loop(int[][]a,int x,int y) { int n=a.length; if(x<n) { if(y<a[x].leng

我一直在尝试打印元素

int[]a={2,-36,98},{21,55},{2,5,4,7,6},{101}

借助递归而不是循环。现在我带了一段代码,但它会打印额外的不需要的元素

public class RecursionDoubleLoop {
    void loop(int[][]a,int x,int y)
    {
        int n=a.length;
        if(x<n)
        {

            if(y<a[x].length)
            {

                System.out.println(a[x][y]+" ");

                y+=1;
                if(y<a[x].length)
                loop(a, x, y);
            }
            y=0;
            x+=1;
            /*if(x>=n)
            {
                System.exit(0);
            }*/
            if(x<n) {
            loop(a, x, y);}
        }
    }
    public static void main(String[] args) {
        RecursionDoubleLoop obj= new RecursionDoubleLoop();
        int[][]a= {{2,-36,98},{21,55},{2,5,4,7,6},{101}};
        obj.loop(a, 0, 0);
    }

}
我的输出

2 -36 98 21 55 2 5 4 7 6 101 101 101 101 101 2 5 4 7 6 101 101 101 101 101 21 55 2 5 4 7 6 101 101 101 101 101 2 5 4 7 6 101 101 101 101 101 21 55 2 5 4 7 6 101 101 101 101 101 2 5 4 7 6 101 101 101 101 101
尝试调试,但最终不得不取消对
系统的注释。退出(0)
函数


如果有人能指出错误,这将非常有帮助。

你离得太近了,告诉你解决方法会让你很痛苦。您只需在检查
y。这是因为对循环的递归调用将增加
y
,直到
false
,并最终继续增加
x
。这么亲密的人

if (y < a[x].length) {
    loop(a, x, y);
    return;
}

转到下一行时,需要将内部代码包装在
else
块中。此外,这里不需要一些检查,因为它们将被递归捕获

void循环(int[]a,int x,int y){
int n=a.长度;
if(x
我怎么知道的?我在方法的第一行打印了
“loop”+x+“”+y
,以找出代码的错误。很容易看出您的实现是好的,但是当增加
x
时,它并没有停止

如果您想要compart实现(基本上是反转If条件),可以尝试以下方法:

void循环(int[]a,int x,int y){
如果(x>=a.length)返回;
如果(y>=a[x]。长度){
循环(a,x+1,0);
}否则{
系统输出打印(a[x][y]+“”);
回路(a,x,y+1);
}
}

检查
x
是否达到行限制或
y
是否大于列限制 然后从递归返回

,检查
y
是否达到列限制,然后开始新的递归以获取具有
x+1
和y
0
的其他数组,然后从递归返回

,因此第二个条件将增加
x
内部递归将增加
y

    void loop(int[][] a, int x, int y) {
        if (x >= a.length || y > a[x].length)
            return;
        if (y == a[x].length) {
            System.out.println();
            loop(a, x + 1, 0);
            return;
        }

        System.out.print(a[x][y] + " ");
        loop(a, x, y + 1);
    }
,输出

2 -36 98
21 55
2 5 4 7 6
101

你能解释一下吗?因为我是个初学者,需要更多的知识。你有什么特别的地方被难住了吗?这是关于return的使用吗?这是关于return的使用,也是为什么我的代码不起作用?我的意思是,我仍然正确地使用了if条件:(您提供的代码不起作用,因为每次循环调用完成后,x总是递增的,如果x小于n,它将再次循环。通过在循环y时使用return,我们不会递增x。这样,在下一次循环调用时,x将按预期递增。我希望这会有所帮助。
    void loop(int[][] a, int x, int y) {
        if (x >= a.length || y > a[x].length)
            return;
        if (y == a[x].length) {
            System.out.println();
            loop(a, x + 1, 0);
            return;
        }

        System.out.print(a[x][y] + " ");
        loop(a, x, y + 1);
    }
2 -36 98
21 55
2 5 4 7 6
101