我不明白为什么 break 不起作用
I can't understand why break is not working
所以我正在尝试编写一个函数来检查数组中是否有重复项。一旦函数检测到重复项,我希望它退出循环并 return 类型。但是,就我而言,它一直在循环,就好像中断不存在一样。有人可以为我解释为什么会这样吗?
public static boolean singleNumber(int[] nums) {
boolean type = false;
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j <= nums.length - 1; j++) {
if (nums[i] == nums[j]) {
type = true;
break;
}
}
}
return type;
}
break
只会跳出内循环,不会跳出两个循环。一种选择是 return true
而不是 break。而returnfalse
在方法的末尾如果没有前面的return。在这种情况下不需要 type
变量。
即使找到重复值,您当前的逻辑也会继续迭代所有元素。要更改它,您需要检查外部 for 循环中的类型值,如果它是真的,那么您可以从该循环中中断并 return 值。
虽然您当前的逻辑将有助于识别重复值,但一旦找到该值就会产生开销,因为它将继续迭代数组。
这是满足您要求的解决方案:
public class Main {
public static void main(String[] args) {
System.out.println( singleNumber(new int[]{1,3,1}) );
}
public static boolean singleNumber(int[] nums) {
boolean type = false;
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j <= nums.length - 1; j++) {
if (nums[i] == nums[j]) {
type = true;
break; // to break out of the inner for loop
}
}
if( type)
{
break; // to break out of the outer for loop
}
}
return type;
}
}
所以我正在尝试编写一个函数来检查数组中是否有重复项。一旦函数检测到重复项,我希望它退出循环并 return 类型。但是,就我而言,它一直在循环,就好像中断不存在一样。有人可以为我解释为什么会这样吗?
public static boolean singleNumber(int[] nums) {
boolean type = false;
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j <= nums.length - 1; j++) {
if (nums[i] == nums[j]) {
type = true;
break;
}
}
}
return type;
}
break
只会跳出内循环,不会跳出两个循环。一种选择是 return true
而不是 break。而returnfalse
在方法的末尾如果没有前面的return。在这种情况下不需要 type
变量。
即使找到重复值,您当前的逻辑也会继续迭代所有元素。要更改它,您需要检查外部 for 循环中的类型值,如果它是真的,那么您可以从该循环中中断并 return 值。
虽然您当前的逻辑将有助于识别重复值,但一旦找到该值就会产生开销,因为它将继续迭代数组。
这是满足您要求的解决方案:
public class Main {
public static void main(String[] args) {
System.out.println( singleNumber(new int[]{1,3,1}) );
}
public static boolean singleNumber(int[] nums) {
boolean type = false;
for (int i = 0; i < nums.length - 1; i++) {
for (int j = i + 1; j <= nums.length - 1; j++) {
if (nums[i] == nums[j]) {
type = true;
break; // to break out of the inner for loop
}
}
if( type)
{
break; // to break out of the outer for loop
}
}
return type;
}
}