ブレークループにはしばらく(条件)メソッド対リターンを使用して

B.brown:

私は少しグーグル面接の質問をやっています。与えられた数まで追加ループ内の数字のペアを見つけます。私は試合を言うように、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;
                    }
                }
            }
        }
    }
}

Chocolite:

配列はすべてにおいて所望のペアを持っていない場合、あなたの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;
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=372972&siteId=1
おすすめ