2016-12-15 4 views
-3

私は、主に要因を含む「ArrayListFunHouse」プログラムで作業しています。ArrayList =コンポジットまたは素数の検索

2つの方法があります。番号自体と1以外の各要素の要素を見つける方法と、要素が複合および/またはプライムであることを検出し、配列からすべての素数を削除する別の方法があります。私は正直にそこに何をするか見当がつかないので、私は、空の発見複合番号方式を左

import java.util.Scanner; 
import java.util.List; 
import java.util.ArrayList; 
import java.util.Collections; 
import static java.lang.System.*; 

public class ArrayListFunHouse 
{ 
    public static ArrayList<Integer> getListOfFactors(int number) 
    { 
     int i=0; 
     ArrayList<Integer> factors = new ArrayList<Integer>(); 

     for(i=2;i<=number-1;i++){ 
     if(number%i==0) 
      factors.add(i); 
     } 
     Collections.sort(factors); 
     return factors; 
    } 
    public static void keepOnlyCompositeNumbers(List<Integer> nums) 
    { 
     /* 

     //GET HELP FOR THIS PART 

     */ 

    } 
} 

注:

は、ここでのメインプログラムです。インターネットから他のソリューションを試すことはできません。ここで

はランナーです:

import java.util.Scanner; 
import java.util.List; 
import java.util.Arrays; 
import java.util.ArrayList; 
import java.util.Collections; 
import static java.lang.System.*; 

public class ArrayListFunHouseRunner 
{ 
    public static void main(String args[]) 
    { 
     System.out.println(ArrayListFunHouse.getListOfFactors(9)); 

     System.out.println(ArrayListFunHouse.getListOfFactors(23)); 

     System.out.println(ArrayListFunHouse.getListOfFactors(50)); 

     System.out.println(ArrayListFunHouse.getListOfFactors(100)); 

     System.out.println(ArrayListFunHouse.getListOfFactors(762));  

     Integer[] nums = {2,6,8,9,10,12,13,15,17,24,55,66,78,77,79}; 
     List<Integer> list = new ArrayList<Integer>(Arrays.asList(nums)); 

     System.out.println(list); 
     ArrayListFunHouse.keepOnlyCompositeNumbers(list); 
     System.out.println(list); 
    } 
} 

ランナーのこの部分:

Integer[] nums = {2,6,8,9,10,12,13,15,17,24,55,66,78,77,79}; 
List<Integer> list = new ArrayList<Integer>(Arrays.asList(nums)); 

System.out.println(list); 
ArrayListFunHouse.keepOnlyCompositeNumbers(list); 
System.out.println(list); 

は、私が持っているように、配列から素数を削除することになっている合成数の方法に依存していますすでに言った。

私はすでに最初の方法に関連するすべてを考え出しました。私が執着しているのは2番目の方法です。

+1

アイデア 'keepOnlyCompositeNumbers'は、リストをループすることができます。各番号nに対して、' getListOfFactors'を呼び出します。次に、戻りリストが空の場合は、> = nが素数です。リストからnを取り除くことができます。 –

答えて

0

渡されるリストを変更するのではなく、メソッドを述語にすることをお勧めします。この方法で、さまざまな方法で使用できます(下記の例を参照)。

ので:そして、あなたは簡単にあなたのリストから複合体を除去することができ

public static boolean isComposite(int number) { 
    for (int i = 2; i < number; i++) { 
     if (number % i == 0) 
      return true; 
    } 
    return false; 
} 

list.removeIf(ArrayListFunHouse::isComposite); 

removeIfは、Java 8で追加されましたが、前で同じ効果を達成するための簡単な方法があります。なおバージョン。

Aもう少しエレガントな方法は、Java 8の流れに精通している場合、複合チェッカーでそれを使用、あなたの因子ファインダーからのストリームを返すために、次のようになります。

public static IntStream getFactors(int number) { 
    return IntStream.range(2, number).filter(n -> number % n == 0); 
} 

public static boolean isComposite(int number) { 
    return getFactors(number).findAny().isPresent(); 
} 

はその後、複合要因を見つけることが次のようになります。

List<Integer> compositeFactors = getFactors(number) 
    .filter(ArrayListFunHouse::isComposite) 
    .collect(Collectors.toList()); 

コレクションの作成時にソートされているため、コレクションを並べ替える理由はありません。

0
​​

これらの合成番号を印刷してください。

 System.out.println(list); 
     List<Integer> compositeList1=new ArrayList<Integer>(); 
     compositeList1= ArrayListFunHouse.keepOnlyCompositeNumbers(list); 
     System.out.println(compositeList1); 
関連する問題