2013-06-19 100 views
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:

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

是否有德爾福相同呢?

+0

[聲明塊級別變量在Delphi分支]的可能重複(http://stackoverflow.com/questions/6519191/declaring-block-level-variables-for-branches-in-delphi) – NINCOMPOOP

+0

的問題中的代碼不需要標記中斷。也許你應該包括一個更現實的例子,它需要一個標籤打破? –

+0

好的。沒問題。 – PSyLoCKe

回答

5

Delphi不支持Java的中斷標籤的等價物。

考慮以下幾點:

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

在Delphi中break總是爆發最裏面的語句,在j在上面的例子中循環。

在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. 
+0

AFAIK提供的示例不包括Java標籤,對我來說,它看起來像他只是試圖退出該方法。 – Peter

+0

@PeterVonča是的,問題中的語法是錯誤的。我只是修復它。 –

+0

你確定你的編輯是正確的嗎?在java標籤中沒有開始或結束聲明,而是使用'Test:break Test'而不是使用'{'和'}'。這就是爲什麼我最初的看法是他只是在尋找退出程序。 – Peter