标签不起作用,我尽力了
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
}
}
以防万一您对如何解决二分查找比如何使用 break
ing 标签更感兴趣。下面的代码与使用 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);
}
我尝试在 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
}
}
以防万一您对如何解决二分查找比如何使用 break
ing 标签更感兴趣。下面的代码与使用 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);
}