2013-06-19 2 views
1

우리는 같은 것들을 할 수 있습니다 :Delphi 용 블록 레이블이 있습니까? 자바에서

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

[델파이 분기 위해 블록 레벨 변수 선언]의 중복 가능성 (http://stackoverflow.com/questions/6519191/declaring-block-level-variables-for-branches-in-delphi) – NINCOMPOOP

+0

문제의 코드는 분류 된 구분이 필요하지 않습니다. 아마도 레이블이있는 구분이 필요한 좀 더 현실적인 예제를 포함해야할까요? –

+0

확인. 문제 없어. – PSyLoCKe

답변

5

델파이는 자바의 레이블 구분과 동등한 것을 지원하지 않습니다.

for i := 1 to 10 do 
    for j := 1 to 10 do 
    if ... then break; 
델파이에서

break 항상 안쪽 문 밖으로 나누기, 위의 예에서 루프에 대한 j :

는 다음과 같은 고려하십시오.

Java에서는 블록에 레이블을 지정하고 해당 레이블이 지정된 블록에서 벗어날 수 있습니다. 따라서 Java에서는 레이블이있는 break를 사용하여 루프의 i을 탈출 할 수 있습니다. 예 :

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 레이블에는 begin 또는 end 선언이 없으므로'{'및'} '대신'Test : break Test'가됩니다. 그래서 내 첫 번째 질문은 단순히 Exit 절차를 찾고 있다는 것입니다. – Peter