标签不起作用,我尽力了

label doesn't work, I tried my best

我尝试在 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;
}

如果你有 3 个循环并且你需要调用 break,标签将与循环一起使用;在最内层的循环中,您将使用标签中断到外层循环,因为如果您只调用 break;它将打破最内层并转到中间循环。您使用的标签错误,您可以通过使用 if .. if else 和 else 语句或使用 switch 语句轻松解决您的问题。

Labelled break 仅适用于循环。 请注意,它们 等同于 goto 因为它们 将控制权 转移到中断后的下一条语句 -ed 循环.

这里是从 Oracle 站点上的 language basics tutorial - break statement 复制的示例(如果有其他好的示例,我懒得原创):

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
    }
}

以防万一您对如何解决二分查找比如何使用 breaking 标签更感兴趣。下面的代码与使用 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);
}