1

在 Java 中,我们可以做这样的事情:

 String output = "";

 stop: {
 // count 10 lines

 for ( int row = 1; row <= 10; row++ ){
   // count 5 columns

   for ( int column = 1; column <= 5; column++ {
     if ( row == 5 )
       break stop;
     output += "* ";

     }

     output += "\n";
    }
   output += "\nTerminated Ok.";
  }

结果是打印了 10 行,但它以 5 结尾:

 * * * * *
 * * * * *
 * * * * *
 * * * * *
 * * * * *

有德尔福等价物吗?

4

1 回答 1

5

Delphi 不支持与 Java 的 break to label 等价的功能。

考虑以下:

for i := 1 to 10 do
  for j := 1 to 10 do
    if ... then break;

在 Delphi 中,break总是跳出最里面的语句,即j上面示例中的 for 循环。

在 Java 中,您可以标记一个块并突破该标记块。因此,在 Java 中,您可以i使用带标签的 break 跳出 for 循环。例如:

outerloop: {
  for (int i = 1; i < 10; i++) {
    for (int j = 1; j < 10; j++) {
      if (...) break outerloop;
  }
}

在 Delphi 中,这样的中断是不可能的。在 Delphi 中最接近的等价物是可怕的goto,它仍然被认为是有害的。

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

var
  i, j: Integer;

label
  outerloopend;

begin
  for i := 1 to 10 do
  begin
    for j := 1 to 10 do
    begin
      if i>5 then
        goto outerloopend;
      Write(Format('%d,%d ', [i, j]));
    end;
    Writeln;
  end;
outerloopend:
  Writeln('Edsger Dijkstra, sorry for using goto!');
  Readln;
end.
于 2013-06-19T13:20:52.033 回答