2016-10-08 27 views
-1

我試過繼續&在java中打破標籤,但它會拋出錯誤。標籤不起作用,我盡我所能

下面是代碼:

private int search(int[] seq, int key, int low, int high){ 
    int mid = low + (high - low)/2; 
    out : //label 
    if (key == mid) { 
     return mid; 
    } 
    if (key < mid) { 
     high = mid; 
     if (key != mid) { 
      break out; 
     } 
    } 
    return 1; 
} 
+1

請將您的問題中的代碼發佈給未來的讀者,以防指向該圖片的鏈接不再有效。 – markspace

+1

郵政編碼不是圖片。舉個例子,我不喜歡導航到由新用戶發佈的隨機Imgur鏈接。 –

+1

@BoristheSpider好吧,我複製它。 –

回答

0

標有標籤break只適用於循環。 而且要注意,他們等效採用goto因爲他們突破-ED週期後控制轉移到下一條語句

這裏從language basics tutorial - break statement Oracle的網站上覆制一個例子(我懶得是原創,如果其他很好的例子是可用):

public static void main(String[] args) { 

     int[][] arrayOfInts = { 
      { 32, 87, 3, 589 }, 
      { 12, 1076, 2000, 8 }, 
      { 622, 127, 77, 955 } 
     }; 
     int searchfor = 12; 

     int i; 
     int j = 0; 
     boolean foundIt = false; 

    search: 
     for (i = 0; i < arrayOfInts.length; i++) { 
      for (j = 0; j < arrayOfInts[i].length;j++) { 
       if (arrayOfInts[i][j] == searchfor) { 
        foundIt = true; 
        break search; 
       } 
      } 
     } 

     if (foundIt) // etc 
    } 
} 

萬一你有興趣更多關於如何解決二進制搜索比如何使用break來標籤。下面的代碼與使用goto的代碼具有相同的性能(如果它們實際存在於java中)。

private static int search(int[] seq, int key, int low, int high) { 

    while (low <= high) { 
     // this is as good as low+(high-low)/2. 
     int mid = (low + high) >>> 1; // this is (low+high)/2 

     int midVal = seq[mid]; 

     if (midVal < key) { 
      low = mid + 1; 
     } 
     else if (midVal > key) { 
      high = mid - 1; 
     } 
     else { 
      // why break when you can return? 
      return mid; // key found 
     } 
    } 
    // key not found. Return the 2's complement of the insert position: 
    // that is -(insertPosition+1) 
    return -(low + 1); 
} 
1

標籤是,如果你有3個循環,以與循環使用,你需要調用中斷;在最內層的循環中,你會使用一個標籤打破外層循環,因爲如果你只是調用break;它會打破最內層並轉到中層循環。你使用錯誤的標籤,你可以通過使用if .. if else和else語句或者使用switch語句來解決你的問題。

+0

肖恩和彼得是正確的:標籤只處理*循環。*不是像OP那樣的「if」語句有沒有其他代碼塊。正如肖恩提到的,如果你恰當地構建它,很容易就會打破「if」。 – markspace