0

このプログラムの目的は、1 から 20 までのすべての整数で割り切れる最小の数を見つけることです。もっと効率的にできることはわかっていますが、現時点では最適化するつもりはありません。プログラムを実行すると、永遠にハングしているように見えるので、どこかに無限ループがあると思います。私はそれを見つけることができないようです。コードのどの部分が問題を引き起こしているのかわからず、比較的簡潔なので、ここにすべて投稿します。

public class Problem5{
  public static void main(String[]args){

    boolean notFound = true;
    while(notFound){
      int n = 20;
      if(testDivide(n)){
        System.out.println(n);
        notFound = false;
      }
      else
        n++;
    }
  }

  private static boolean testDivide(int target){
    for(int i = 20; i > 0; i--){
      if(target % i != 0)
        return false;
    }
    return true;
  }
}

誰かがこれで私を助けてくれれば、とても感謝しています。

追加情報: プログラムは数値も出力しないため、if(testDivide(n))true と評価されることはないと思います。

4

4 に答える 4

1

forループはfalseを返すことを確認し、whileループは常にiを20に設定します。これは無限ループです。

于 2013-02-24T03:58:35.420 に答える
1

whileループを参照してください。

while(notFound){
      int n = 20;
      if(testDivide(n)){
        System.out.println(n);
        notFound = false;
      }
      else
        n++;
    }

whileループが最初に実行されるとき、の値nはに設定され20ます。
テスト除算はfalseを返します。
の値nはにデクリメントされ19ます。
ループが再度実行されます。
の値はにn再初期化され20ます。
これは、ループnの外側で初期化する問題です。while

于 2013-02-24T04:01:25.570 に答える