java - 使用递归而不是循环打印嵌套数组中的元素
问题描述
我一直在尝试打印元素
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
我的输出
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
尝试调试但最终不得不取消注释该System.exit(0)
功能。
如果有人能指出错误,那将非常有帮助。
解决方案
你是如此接近,以至于告诉你解决方案很痛苦。您需要做的只是return
检查y < a[x].length
. 这是因为对循环的递归调用将会增加y
,直到 this 是false
并最终继续增加x
。这么亲密的人。
if (y < a[x].length) {
loop(a, x, y);
return;
}
输出
2
-36
98
21
55
2
5
4
7
6
101
推荐阅读
- java - 在 ubuntu 18.04 中安装 OpenJDK OpenJ9 后,我丢失了可执行文件
- excel - 从另一个子程序调用一个子程序
- c - ESP数据包的C AES-GCM解密不起作用
- android - 如何正确地从返回方法中释放位图?
- javascript - 为什么 ob.constructor.prototype == ob.__proto__
- sql-server - TSQL 跨链接服务器使用 soundex
- python - [在 PyCharm 中安装库 Pyes]
- presto - Presto view 比 table 快
- firebase - Firebase Firestore - 如何防止并发写入?
- typescript - 在 Firebase 的 Angular 8 中显示 displayName