在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:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
是否有Delphi等价物?
答案 0 :(得分:5)
Delphi不支持Java标记的中断。
请考虑以下事项:
for i := 1 to 10 do
for j := 1 to 10 do
if ... then break;
在Delphi中,break
总是突破最内层语句,上面示例中的j
for循环。
在Java中,您可以标记一个块并打破该标记的块。因此,在Java中,您可以使用带标签的中断来突破i
for循环。例如:
outerloop: {
for (int i = 1; i < 10; i++) {
for (int j = 1; j < 10; j++) {
if (...) break outerloop;
}
}
德尔福无法实现这样的突破。 Delphi中最接近的等价物是可怕的goto
,它仍然是considered harmful。
{$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.