2012-02-17 7 views
3

最初の100素数を印刷します。だから、私は整数100の配列を作成しました。私は最初の素数、bag [0] = 2を追加しました。そして、次の数字のためにアルゴリズムを書こうとしました。 3から始まり、配列がいっぱいになるまで続きます。すべての数は配列の前の要素で割り切れるかどうかによって素数であるかどうかに決定され、素数であれば配列に追加されます。ここ素数計算で出力がありません

は私のコードです:

public class Trial02 
{ 
    public static void main(String[] args) 
    {  
     int[] bag = new int[100]; 
     bag[0] = 2; //first element of prime array 
     int valid = 1; 
     int i; 
     boolean result = true; 
     String str = ""; 

     //starting from 3 it checks if a number is prime until array is full 
     for(i=3; valid<bag.length; i++) 
     { 
      //it checks if previous primes in array are divisible by current number until coming to current number 
      for(int k=0; k<valid; k++) 
      { 
       if(i % bag[k] == 0) 
        result = false; 
      } 

      if(result == true) //if it is prime it is added to array 
      { 
       bag[valid] = i; 
       valid ++; 
      } 
     } 

     //printing results 
     for(int m=0; m < bag.length; m++) 
      str = str + bag[m] + " "; 
     System.out.println("zaa xd"); 
     System.out.println(str); 
    } 

} 

が、それは任意の出力、ちょうど空白を与えることはありません。私の間違いがどこにあるのかわかりませんでした。 ありがとうございます。

+1

あなたの宿題に幸運! StackOverflowを使うことを学ぶことは、最初の100個の素数を計算するよりも将来的に重要になります。私の良い人を運ぶ! – picciano

+0

無限ループに注目してください。 "出力を印刷しません"は、デバッグにはあまりにも非特異的です。 – Guvante

答えて

0

最初の100個の素数を決定するロジックが正しくありません。また、論理エラーの数は他の人によって示されるように存在します。私はあなたのコードを書き直しましたが、テストされていません。私はそれが動作すると思います:

public class Trial02 
{ 
    public static void main(String[] args) 
    {  
    int[] bag = new int[100]; 
    bag[0] = 2; //first element of prime array 
    int valid = 1; 
    int i; 
    boolean isPrime = true; 
    String str = ""; 

    //starting from 3 it checks if a number is prime until array is full 
    for(i=3; valid<bag.length; i++) 
    { 
     isPrime = true; 
     for (int k = 2; k < i; k++) 
     { 
      if (i % k == 0) 
      { 
       isPrime = false; 
       break; 
      } 
     } 

     if (isPrime == true) 
     { 
      bag[valid++] = i; 
     } 
    } 

    //printing results 
    for(i=0; i < bag.length; i++) 
     str = str + bag[i] + " "; 
    System.out.println("zaa xd"); 
    System.out.println(str); 
    } 

} 
2

数が素数であるかどうかあなたが決して実際にチェックしている

2

resultはどこにでも便利に設定されていない)あなたが最初forループ内result = true;をリセットする必要があるように見えます。投稿されたコードはresult = falseに設定され、変更されることはありません。

0

コードには多くの論理的な誤りがあります。

まず、インデクサーとは関係のないファイナライズケースを持つforループがあります。これは有効ですが、コードを理解しにくくします。

さらに重要なのは、結果が偽に設定されているだけなので、ループが永久に実行されることです。

2

最も明白なエラーは、boolean result = true;がループ外にあることです。一度falseに設定すると、それはtrueに決して戻されません。 プログラムが停止しないため、出力が表示されません。

補足として、発見した最後の素数まですべての素数をチェックする必要はありません。候補素数の平方根に達すると、つまりi*i > bag[k]を停止することができます。あなたはあなたの限界が100であるときにどんな効果にも気づかないでしょう、しかし100000を試してみると、それはより多くの助けになります。

関連する問題