2017-09-13 30 views
0

我會告訴你我提交作業的答案給它我在循環塊的開始在java中放置了一個循環中斷,而不是在循環關鍵字之前。這是常見的還是會帶來意想不到的結果?

void chkbnch() 
{ 
    System.out.println("\n The students under notice period are =>\n\n"); 
    for(int i=0;i<25;i++) 
    **ol:{** 
     int cnm=0; 
     int cnm2=0; 
     for(int j=0;j<7;j++) 
     { 
      if(mrks[i][j]>=50) 
      { 
       cnm++; 
      } 
      if(cnm==3) 
      { 
        //i++; 
        **break ol;** 
      } 
      if(mrks[i][j]<50) 
      { 
       cnm2++; 
      } 
     } 
     if(cnm2>=3||cnm<3) 
     { 
      System.out.println("\n Student id =>"+(i+1)); 
     } 
    } 
} 

在這裏,我用休息的時候,我不希望循環遞增,重複剛纔的循環語句的想法。我知道這可以通過減少循環控制來完成,但這不是我的問題。

所有我想問的是,這是在java中定義的行爲還是它只是一個機會,這是它的結果。

+0

爲什麼不只是「標準」「休息」,如果你想要做的就是擺脫循環? – EJoshuaS

+0

這不會導致無限循環(因爲你沒有增加'我'你應該得到完全相同的結果作爲最後一次迭代)? – UnholySheep

回答

-1

這種使用break聲明是完全合法的,雖然它是不尋常的,它不會做你說你想要的。

JLS §14.15說:

break語句標籤標識符試圖將控制轉移到封閉的標記語句(§14.7),其具有相同的標識符作爲其標籤;此聲明稱爲中斷目標,然後立即正常結束。在這種情況下,中斷目標不需要是switch,while,dofor語句。

的「標記語句」在你的例子是{ .. }塊語句,這是由for循環執行的語句。執行中斷時,該塊語句完成,將控制返回到for循環,該循環繼續執行增量i++,測試條件i<25,然後繼續循環。

它具有與直接標記外部循環,然後使用continue ol;相同的行爲。

循環計數器仍將增加。如果您想防止這種情況發生,請使用手動i--;或將i++;for循環標頭中移出,並移至循環體的末尾。

+0

是真的,謝謝。我認爲該程序完美運行是因爲別的,而不是這個。儘管在C(Dev C++)中,類似這樣的事實實際上導致了無限循環 int i; (i = 1; i <= 10; i ++) \t ol:{ \t \t printf(「%d」,i); \t \t if(i%4 == 0) { goto ol; } } @Boann –

+0

@HimanshuPanchal這在C++中確實是無限的。 'goto' *直接進入標籤語句,所以'for'循環沒有機會做'i ++'。而'break' *完成*標記語句,從而完成當前循環迭代,它將控制返回給'for'語句以查看是否要再次循環。 – Boann

-1

好像你想要continue關鍵字而不是break。 continue會中斷循環的當前迭代,並且執行跳回評估階段,如果評估通過,循環將繼續。 break打破循環的當前迭代,執行跳轉到循環結束大括號之後的第一行。

編輯:如果你需要循環增量控制「不增量」,當你循環時,例如,從列表中拉出相同的對象,繼續後,你需要滾動你自己解。

+0

我知道我的朋友,那不是我的問題。我想知道會發生什麼,我只在塊的開始處放置了中斷標籤,並且是確定性的? 繼續不會重複循環爲同一迭代,這就是我想要的無論如何。 –

+0

好的,現在我看到你正在談論使用「標籤」作爲「break」(和「goto」)的形式。看到這個答案:https://stackoverflow.com/questions/26430630/how-to-use-goto-statement-correctly。你需要'bre​​ak'標籤和'GoTo'標籤部分。您可以將標籤放在循環的頂部,但沒有「GoTo」部分,您的代碼將永遠不會跳轉到標籤。 – geneSummons

相關問題