黑马程序员技术交流社区
标题:
在JAVA中如何跳出当前的多重嵌套循环?
[打印本页]
作者:
刘海源
时间:
2012-7-23 22:25
标题:
在JAVA中如何跳出当前的多重嵌套循环?
在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break 语句,即可跳出外层循环。例如,
ok:
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
System.out.println(“i=” + i + “,j=” + j);
if(j == 5) break ok;
}
}
另外,我个人通常并不使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如,要在二维数组中查找到某个数字。
int arr[][] = {{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i<arr.length && !found;i++)
{
for(int j=0;j<arr[i].length;j++)
{
System.out.println(“i=” + i + “,j=” + j);
if(arr[i][j] == 5)
{
found = true;
continue;
}
}
}
貌似有点问题,可就是找不出来。帮帮我啊
作者:
张頔
时间:
2012-7-23 22:34
哥们,你肿么这么多问题啊~~~~~~
int arr[][] = {{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i<arr.length && !found;i++)
{
for(int j=0;j<arr
.length;j++)
{
System.out.println("i=" + i + ",j=" +
arr
[j]
);//注意这地方
if(arr
[j] == 5)
{
found = true;
continue;
}
}
}
作者:
李东升
时间:
2012-7-23 22:43
public static void main(String []args){
int arr[][] = {{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i<arr.length && !found;i++)
{
for(int j=0;j<arr[i].length;j++)
{
System.out.println("i=" + i + ",j=" + j);
if(arr[i][j] == 5)
{
System.out.println(arr[i][j]);
found = true;
break;
}
}
}
}
这个就可以了。break是直接跳出整个内层循环。而continue只是把本次内层循环跳出,执行j++,然后继续内层循环。
这个思路很好啊。通过内层循环变量的改变来改变外层循环的执行与否。赞一个。
作者:
张頔
时间:
2012-7-23 22:44
也不知道,你到底问的是什么问题,另一个问题解决,遇到5就结束的话,只要再在第二个for循环里也加个判断就行
for(int j=0;j<arr[i].length&& !found;j++)
{
System.out.println("i=" + i + ",j=" + arr[i][j]);
if(arr[i][j] == 5)
{
found = true;
continue;
}
}
作者:
李东升
时间:
2012-7-23 22:45
输出是
i=0,j=1
i=0,j=2
i=1,j=0
i=1,j=1
5
结果没错吧?
作者:
杨锦
时间:
2012-7-23 22:58
首先
System.out.println(“i=” + i + “,j=” + j);//这一行的“”打错了,应该是" "。
程序上的问题楼主是觉得什么呢?
continue是跳出当前循环,进行下一次循环,当arr[][]==5的时候程序跳出,进行了一次j++,还是把内层的循环走完了,但是你把found的值赋成true了,外层循环的条件就判断不成功了,程序就停止了,我给你加了一句输出 arr[i][j]的语句,运行如下:
class Demo1
{
public static void main (String [] args) {
int arr[][] = {{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i<arr.length && !found;i++)
{
for(int j=0;j<arr[i].length;j++)
{
System.out.println("i=" + i + ",j=" + j);
if(arr[i][j] == 5)
{
found = true;
continue ;
}
System.out.println(arr[i][j]+",");
}
}
}
}
结果是:
i=0,j=0
1,
i=0,j=1
2,
i=0,j=2
3,
i=1,j=0
4,
i=1,j=1
i=1,j=2
6,
i=1,j=3
7,
作者:
黑马黄宏强
时间:
2012-7-23 23:22
我可以这样认为你的需要是使用双层循环来查找是否满足某个条件,如果满足了 直接退出全部循环
下边是我写的代码:
class Break {
public static void main(String[] args) {
char[][] arrChar = { { 'a', 'b', 'c', 'd' }, { 'e', 'f', 'g', 'h' },
{ 'i', 'j', 'k', 'l' }, { 'm', 'n', 'o', 'p', 'q' } };
char x = 'f';
System.out.println(found(arrChar,x));
}
// 查找二维char数组中是否包含有X;
static boolean found(char[][] arrChar, char x) {
boolean result = false;
boolean f = true;
for (int j = 0; j < arrChar.length&f; j++) {
for (int k = 0; k < arrChar[j].length; k++) {
if (x == arrChar[j][k]) {
f = false; //注意这里,当条件满足时,返回结果然后结束内循环,而且通过修改外部循环条件F达到结束外部循环的目的
result = true;
break;
}
}
}
return result;
}
}
运行结果为true
作者:
肖琦
时间:
2012-7-24 00:47
看了你说的,有点不明白你到底想说什么,不知道你是不是想说走了if判断,内外循环就全停,如果是的话,你将if里面的continue改为break;continue是结束本次循环执行下次循环,因此还会执行内层循环;break则是直接跳出本循环体;
个人感觉其实用标记还简洁实用点。
作者:
姬仁贵
时间:
2012-7-24 08:55
对于楼主的问题可以有两种解决方法:
方法一:
int arr[][] = {{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i<arr.length && !found;i++)
{
for(int j=0;j<arr
.length ;j++)
{
System.out.println(“i=” + i + “,j=” + j);
if(arr
[j] == 5)
{
found = true;// found 只在外层循环内有作用。你这里把他改为true是为了下一次外循环做判断,以便跳出外循环。
continue;//这里的continue只是结束当前循环,进入下次循环。在这里是不能跳出内循环的。
//这里即使arr
[j] == 5 了内部循环还是会继续的。所以这里就不能做到当条件满足后立即跳出整个外循环。
//
这里应该用break跳出内部循环,进入外部循环的下次循环。执行 i++,再判断 i<arr.length && !found 因为found = true,
//
所以整个表达式为false 所以条件不满足跳出整个循环。
}
}
}
方法二:
如果楼主你想用continue 语句跳出整个外部循环的话也可以,楼主你的想法很好,通过内层循环对变量的改变来改变外层循环的执行与否,我很赞同。
同时
定义的变量也可以控制内部循的执行与否
呀!!!你可以让 found 同时控制内部循环的判断语句
j<arr
.length && !found
,这样当执行continue后内部循环就会结束,
进入外部循环,同样的外部循环也会判断i<arr.length && !found结果为false跳出外循环,这样就做到了当条件满足后就跳出整个循环了!
int arr[][] = {{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i<arr.length && !found;i++)
{
for(int j=0;
j<arr
.length && !found
;j++)
{
System.out.println(“i=” + i + “,j=” + j);
if(arr
[j] == 5)
{
found = true;
continue;
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2