首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 怎么跳出2重for循环而不用goto [无满意答案结贴]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 11:54:51 楼主
    怎么跳出2重for循环而不用goto,知道的,给点代码看看
    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fetag
    • 等级:
    发表于:2008-05-12 12:01:191楼 得分:0
    用两个break,内层一个,外层一个...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 12:02:512楼 得分:0
    for(int i=0;i <M;++i)
    {
      for(int k=0;k <N;++k)
      {
            if(...)
                i=M,k=N;//直接修改循环变量.
      }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 12:07:393楼 得分:0
    1内外break
    2修改控制循环变量,如2楼
    3用setjmp,longjmp
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 12:11:344楼 得分:0
    补充一下,设置状态变量
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 12:34:505楼 得分:0
    戒指的第三个类似goto....
    还是状态变量比较合适
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 12:41:126楼 得分:0
    用TRY,抛出异常
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fetag
    • 等级:
    发表于:2008-05-12 12:42:267楼 得分:0
    你们又玩邪的了是不?那好...

    用exit();用return这些,都能立刻结束循环,不管有多少层...

    要是C++的,那可以抛出异常,也可以...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 12:45:578楼 得分:0
    谁在玩?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 12:46:059楼 得分:0
    引用 3 楼 Treazy 的回复:
    1内外break
    2修改控制循环变量,如2楼
    3用setjmp,longjmp


    setjmp,longjmp~~~~汗,直接用goto得了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 13:25:4210楼 得分:0
    说实话,感觉这几年没写到过需要跳出二重循环的代码。如果真的遇到的话,用return。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 13:35:5911楼 得分:0
    break;适当的时候可以申明变量加标记。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 13:38:2512楼 得分:0
    每一重循环封装入一个函数。就不需要问跳2重循环问题了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 13:46:5413楼 得分:0
    C/C++ code
    bool x=false for(;;) { for(;;) { if(//some) { x=true; break; } } if(x) break; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 13:51:3014楼 得分:0
    引用 3 楼 Treazy 的回复:
    1内外break
    2修改控制循环变量,如2楼
    3用setjmp,longjmp
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 19:29:0115楼 得分:0
    全部用 tag 控制, 倒是个很好的方法.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 19:31:3216楼 得分:0
    具体情况具体对待,基本原则就是使得外层循环的循环条件不满足
    如果循环层数比较多,应该把内存循环函数化,否则控制逻辑会越来越复杂
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mscf
    • 等级:
    发表于:2008-05-12 19:43:3117楼 得分:0
    看似只有根据条件判断逐层break了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 19:46:1518楼 得分:0
    引用 12 楼 taodm 的回复:
    每一重循环封装入一个函数。就不需要问跳2重循环问题了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 20:46:3619楼 得分:0
    添加一个标志变量,通过这个变量来直接跳出外层循环。
    具体代码13楼已经写出来了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 21:07:1620楼 得分:0
    不错。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 21:08:3121楼 得分:0
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 21:14:0022楼 得分:0
    支持修改循环变量
    用两个break 也可以 但认为麻烦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 21:17:2923楼 得分:0
    C/C++ code
    int main() { for (int i = 0, flag = true; flag && (i < 100); ++i) { for (int j = 0; j < 100; ++j) { if (i == 50 && j == 50) { flag = false; break; } } } return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Wolf0403
    • 等级:
    发表于:2008-05-12 21:18:3724楼 得分:0
    引用 7 楼 fetag 的回复:
    你们又玩邪的了是不?那好...

    用exit();用return这些,都能立刻结束循环,不管有多少层...

    要是C++的,那可以抛出异常,也可以...


    两重循环封装一个函数,return 出去最方便。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 21:21:2825楼 得分:0
    还可以置标志位
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 22:07:2826楼 得分:0
    break
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 22:30:2727楼 得分:0
    引用 24 楼 Wolf0403 的回复:
    引用 7 楼 fetag 的回复:
    你们又玩邪的了是不?那好...

    用exit();用return这些,都能立刻结束循环,不管有多少层...

    要是C++的,那可以抛出异常,也可以...


    两重循环封装一个函数,return 出去最方便。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 23:55:2828楼 得分:0
    引用 6 楼 cutestar 的回复:
    用TRY,抛出异常


    用异常处理来作为流程控制不好.
    异常应该是处理异常情况用,正常的流程跳转不应用异常.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 08:59:2029楼 得分:0
    不跳出双FOR已很多年
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lfhlyx
    • 等级:
    发表于:2008-05-13 11:29:1330楼 得分:0
    比较喜欢用循环变量控制~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 12:36:3531楼 得分:0
    引用 7 楼 fetag 的回复:
    你们又玩邪的了是不?那好...

    用exit();用return这些,都能立刻结束循环,不管有多少层...

    要是C++的,那可以抛出异常,也可以...

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 12:53:4932楼 得分:0
    break; break;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 12:56:5233楼 得分:0
    怎么一个小问题冒出这么多的稀奇答案?
    最好要么return;
    要么break;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 13:09:3234楼 得分:0
        还是觉得二楼的方法好
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 13:52:5235楼 得分:0
    放着goto不用,唉,无语!!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 15:26:3736楼 得分:0
    基本上写三层以上循环的程序员是傻瓜。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 15:28:3137楼 得分:0