私は少しグーグル面接の質問をやっています。与えられた数まで追加ループ内の数字のペアを見つけます。私は試合を言うように、8を構成する数字2と6を見つけ=ループが停止している間、それはしかし、6と2である第二を見つけるまで、しかしそれはまだ進行し、これらの数字は、私はすでにだけで、他の方法を発見したことは事実そう合計を与える任意の2つの数値がある場合は周りと私は私のループは私のif文の状態としてブレイクすると予想していた、一致=真したがって、ループを終了、私は私が間違っているかのだと思います。
しかし、私は、while文とちょうどリターンを取り除く場合。一致が見つかると、それは(私はそれがしたい)は、第2の一致を見ずに壊れます。
ですが、なぜでしょう、両方の論理は私にはまったく同じようです。
一方、(条件)を用いる方法
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ループを入れ子にするまでしかし、私たちはしばらくの状態をチェックしません(つまり、すべての可能なペアがチェックされます)。forループネスト全体はwhileループの1回の繰り返しで実行されます。次に、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;
}
}
}
}
}
内部用ループは無秩序対の二重カウントを減らすように変更されます。一致するものが見つかると印刷されるたびに、我々は、機能を終了します。
また、あなたの最初の実装では、whileループ内でbreak文を追加することができます。
if(match == true) {
break;
}