假设现在有5重for循环,怎样从第5重循环里退出来,继续执行最外层循环后面的代码呢?

解决方案 »

  1.   

    这个没有玩过,如果是我的话,可能会考虑用goto,但是我没有用过goto,听人说goto用多了不好。。还有就是用一个变量可以吧。
    比方说
    procedure TForm1.btn1Click(Sender: TObject);
    var
      a,b,c,d,e :Integer;
      j : Boolean;
    begin
      for a:= 0 to 10 do
      begin
        for b := 0 to 10 do
        begin
          if j then
          begin
            Break;
          end;
          for c := 0 to 10 do
          begin
            if j then
            begin
              Break;
            end;
            for d := 0 to 10 do
            begin
              if j then
              begin
                Break;
              end;
              for e := 0 to 10 do
              begin
                if e = 5 then
                begin
                  j := True;
                  Break;
                end;  
              end;  
            end;  
          end;  
        end;  
      end;  
    end;
      

  2.   

    goto是一个方法,我都快忘记了这个指令。不过还有不用goto,不是N级跳的方法,看有没谁想到了。
      

  3.   


    procedure TForm1.FormCreate(Sender: TObject);
    label F;
    var
      I, J ,K: Integer;
    begin
      for I := 0 to 10 do
      begin
        for J := 0 to 10 do
        begin
          for K := 0 to 10 do
          begin
             goto F;
          end;
        end;
      end;  F: ShowMessage('YES');
    end;这样的? 
      

  4.   

    想到一个办法,在第5层抛个异常,让后第一层截获
    var
      a, b, c, d, e: Integer;
    begin
      for a := 0 to 10 do
      begin
        try
          for b := 0 to 10 do
            for c := 0 to 10 do
              for d := 0 to 10 do
                  for e := 0 to 10 do
                  begin
                    ShowMessage('');
                    raise Exception.Create('');
                    Break;
                  end;
         except
         end;
      end;
    end;
      

  5.   

    结帖,有人想到用异常了,OTL
      

  6.   

    goto也是好方法,我开始没想到,因为太久没用这个语句了。