A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 会飞的狼 中级黑马   /  2013-8-9 16:07  /  1782 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

插入算法中关于break位置导致的错误
public static void charuSort(int[] arr)
{
       for(int y=1;y<arr.length;y++)
           {
                 for(int x=0;x<y;x++)
                     {
                            if(arr[y]<=arr[x])
                               {
                                     int temp =arr[y];
                                     for(int i=y;i>x;i--)
                                         {
                                               arr[i]=arr[i-1];
                                         }
                                     arr[x]=temp;
                                     break;  写在这里就对了为什么必须在这里?
                              }
                    }         ........本来我把return写在这里的,但是不对,跳不出第二个for循环,错误
          }
}

评分

参与人数 1黑马币 +3 收起 理由
以防万一 + 3 神马都是浮云

查看全部评分

5 个回复

倒序浏览
在嵌套的双重循环中,如果break写在内层循环中,就像楼主写的那个位置(在内层循环中 ),那就是结束内层循环,结果就是跳不出第二个for循环,错误。如果写在外层!那就是两个循环都退出!因为外层包含内层!
主要是就看你break靠近哪个循环就可以了!那他就控制这个循环!并只对这个循环有效!
还有break语句的应用范围,应用在选择结构和循环结构中,
以上是自己的一点理解,愿共同学习。
回复 使用道具 举报
break是跳出当前循环
return会结束当前整个函数
回复 使用道具 举报
哥们,其实这个也不是什么原理不原理的东西,是基础语法,就应该熟记,多用,我的理解是这样,
更正楼上哥们的说法:

break 是跳出当前循环体,而不是结束当前循环,这个要区分开来。
return 会结束当前整个函数,也可以这么说,这样说可能更好理解。
continue 是结束被本次循环,立即进入下一次循环。

希望能给你帮助,加油吧!
回复 使用道具 举报
如果你的是循环体的话break是后面语句不再执行而不是结束当前循环体。
回复 使用道具 举报
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马