我正在做一个谷歌面试小问题。在一个循环中找到一对数字,这些数字加起来就是给定的数字。我找到了组成8的数字2和6,所以我说match=true,这样while循环就停止了,但它仍然继续,直到找到第二个数字,即6和2。然而,我已经找到了相反的数字,我本来希望我的循环会中断,因为我的if语句指出,如果有任何2个数字给出总和,match=true,因此终止循环,不过我想我错了。
然而,如果我去掉while语句,只返回;一旦找到一场比赛,它就会中断,而不需要寻找第二场比赛(我希望它这样做(。
为什么会发生这种情况,两者的逻辑对我来说似乎完全一样
使用while(条件(方法
public class Main {
public static void main(String[]args){
int[] list = new int[]{1,2,1,1,1,6};
boolean match = false;
int sumNeeded = 8;
while(!match){
for(int i = 0; i < list.length; i ++){
for(int j = (list.length -1); j >= 0; j --){
if(list[i] != list[j]){
if(list[i] + list[j] == sumNeeded){
System.out.println("The numbers are = " + list[i] + " & " + list[j]);
match = true;
}
}
}
}
}
}
}
使用return
public class Main {
public static void main(String[]args){
int[] list = new int[]{1,2,1,1,1,6};
int sumNeeded = 8;
for(int i = 0; i < list.length; i ++){
for(int j = (list.length -1); j >= 0; j --){
if(list[i] != list[j]){
if(list[i] + list[j] == sumNeeded){
System.out.println("The numbers are = " + list[i] + " & " + list[j]);
return;
}
}
}
}
}
}
在while循环实现中,如果数组根本没有所需的对,则会导致无限循环。在您的解决方案中不需要while语句。
进入while循环后,在数组中查找所有可能的对,然后检查它们的和。如果它等于所需的和,则使布尔变量匹配为true。
但是,在嵌套的for循环完全执行之前(即,检查所有可能的对(,我们不会检查while条件。整个嵌套的for循环在while循环的一次迭代中执行。然后,再次检查while循环条件。
由于在while循环的第一次迭代结束时,所有可能的对都已考虑在内,因此不需要while循环。
此外,在您的实现中还有其他逻辑错误。正确的暴力实现如下:
public class Main {
public static void main(String[]args){
int[] list = new int[]{1,2,1,1,1,6};
boolean match = false;
int sumNeeded = 8;
for(int i = 0; i < list.length; i ++){
for(int j = (list.length -1); j > i; j --){
if(list[i] + list[j] == sumNeeded){
System.out.println("The numbers are = " + list[i] + " & " + list[j]);
return;
}
}
}
}
}
对内部for循环进行了修改,以减少无序对的重复计数。只要找到并打印出匹配项,我们就会退出该函数。
您还可以在初始实现的while循环中添加break语句。
if(match == true) {
break;
}
while条件继续执行第一个和第二个for循环,直到它完成为止,与return一样,它完全停止从第一个和第一个循环执行。
要修复while循环,可以使用一个标签,然后从中断开。
firstLoop:
for(int i = 0; i < list.length; i ++) {
match = true;
break firstLoop;