2017-07-16 13 views
-3

0と1を含まない素数を削除するにはどうすればよいですか?0と1を除いた素数を見つけたいのですか?今は{0,1,3、 5,8} ---->をコンパイルすると0と1が素数になります "素数は見つかった= 0素数は見つかった= 1素数は見つかった= 3素数は見つかった= 5"これは私のプログラムです: ありがとうあなたの助けに。配列のJavaから素数を削除する

public static void main(String args[]) 
    { 
     Scanner s=new Scanner(System.in); 
     int i,j,size; 
     boolean status; 
     System.out.print("Enter size of array="); 
     size=s.nextInt(); 
     int arr[]=new int[size]; 
     int tmp[]=new int[size]; 
     System.out.println("Enter Elements in array..."); 
     for(i=0;i<size;i++) 
     { 
      arr[i]=s.nextInt(); 
     } 
     for(i=0;i<size;i++) 
     { 
      status=true; 
      for(j=2;j<arr[i]-1;j++) 
      { 
       if(arr[i]%j==0||(arr[i]==0)||arr[i]==1) 
       { 
        status=false; 
        tmp[i]=arr[i]; 
        break; 
       } 
      } 
      if(status==true) 
      { 
       System.out.println("Prime Number Found="+arr[i]); 
      } 
     } 

     System.out.println("New Array...."); 
     for(i=0;i<size;i++) 
     { 
      System.out.println(tmp[i]); 
     } 
    } 
} 
+1

に置き換える必要があり、あなたの実際の質問/問題は何ですか?あなたのコードはすでに、ユーザーが入力した素数を正しく識別しているようです。 –

+0

今私は素数として0と1を持っていますが、0と1を除外したいのですが、この行でこれを試しました:if(arr [i]%j == 0 ||(arr [i] == 0 )|| arr [i] == 1)しかし何も変わらない – Invictus05

+0

明らかにうまくいかない。数字が0または1の場合、あなたのプログラムが ''もし ''に到達できるかどうか考えようとしましたか?それは明らかにできません。 – Tom

答えて

1

あなたのコードは問題でいっぱいだったが、コードでは、私は、次の主要な問題解決なかったの下:ないプライム正しく さ

  • あなたが0のベースケースを処理していないし、1を
  • メソッドの最後に印刷していた出力配列に、見つかった素数を正しく書き込んでいない可能性があります。

次のコードを見て、おそらく意図したことのサンプルをご覧ください。 0から包括的な20までの数字を入力するための

public static void main(String[] args) { 
    Scanner s = new Scanner(System.in); 
    boolean status; 
    System.out.print("Enter size of array="); 
    int size = s.nextInt(); 
    int arr[] = new int[size]; 
    int tmp[] = new int[size]; 
    System.out.println("Enter Elements in array..."); 
    int primerCounter = 0; 
    for (int i=0; i < size; i++) { 
     arr[i] = s.nextInt(); 
    } 
    for (int i=0; i < size; i++) { 
     status = true; 
     if (arr[i] == 0 || arr[i] == 1) { 
      status = false; 
     } 
     else { 
      for (int j=2; j <= arr[i]-1; j++) { 
       if (arr[i] % j ==0) { 
        status = false; 
        break; 
       } 
      } 
     } 
     if (status == true) { 
      tmp[primerCounter++] = arr[i]; 
      System.out.println("Prime Number Found="+arr[i]); 
     } 
    } 

    System.out.println("New Array...."); 
    for (int i=0; i < primerCounter; i++) { 
     System.out.println(tmp[i]); 
    } 
} 

、私は次の出力を得た:

{2, 3, 5, 7, 11, 13, 17, 19} 
0

あなたの質問は非常に明確ではありませんが、私はあなたの問題は、コードあなたのことであると仮定しています投稿は0と1を素数とみなし、あなたはそれを望んでいません。そうだとすれば。エラーチェック

は、forループ内であることである

実際にfor(j=2;j<arr[i]-1;j++)

、ARR [i]が0または1であり、状態に等しい

j<arr[i]-1 

は、j = 2でarr [i] -1が-1または0のいずれかに評価されるため、直ちにfalseに評価されます。結果として、コード

if(arr[i]%j==0||(arr[i]==0)||arr[i]==1) 
    { 
     status=false; 
     tmp[i]=arr[i]; 
     break; 
    } 

が実行されることはありませんし、次のループで

status==true 

は真と評価されます。

一つの解決策は、それが今どこからチェック

arr[i]==0)||arr[i]==1 

を削除し、その状態で==を変更した後

status==true 

で1かのように同じで、それを置くことです!= 。

if(arr[i]%j==0||(arr[i]==0)||arr[i]==1) 
{ 
    status=false; 
    tmp[i]=arr[i]; 
    break; 
} 

if(arr[i]%j==0) 
{ 
    status=false; 
    tmp[i]=arr[i]; 
    break; 
} 

if(status==true) 
{ 
    System.out.println("Prime Number Found="+arr[i]); 
} 

なるべき一言で言えば

は、

if(status==true || arr[i]!=0 || arr[i]!=1) 
{ 
    System.out.println("Prime Number Found="+arr[i]); 
} 
なるはずです

あなたが投稿したコードには別の間違いがあります。同じインデックスiを使ってarrを反復し、値を割り当てるtmpの要素を選択します。 arrのすべての要素が素数ではなく、したがってtmpにコピーされないので、配列tmpにいくつかの「穴」、つまり割り当てられていない要素があります。そのことをあなたは最終的に念頭に置いて、TMPのクマを反復するとき、また

tmp[k]=arr[i]; 
k++; 

代わりの

tmp[i]=arr[i]; 

:あなたは、TMPの要素にアクセスし、それを手動でインクリメントする0に初期化別のインデックスKを維持する必要がありますサイズはarrと同じではありませんが、私はちょうど説明した理由で小さいです。したがって、

for(i=0;i<size;i++) 
    { 
     System.out.println(tmp[i]); 
    } 

for(i=0; i < actual-size-of-tmp; i++) 
    { 
     System.out.println(tmp[i]); 
    } 
関連する問題