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
和y0
的其他数组,然后从递归返回
,因此第二个条件将增加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