2016-12-15 41 views
-3

我正在研究一個主要涉及因素的「ArrayListFunHouse」程序。ArrayList =查找複合或素數

有兩種方法:一種找出除數字本身和一個數字之外的每個數字的因子的方法,以及另一種找出哪些因子是複合和/或素數的方法,以及從數組中去除所有素數。

這裏是主程序:

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); 

依賴於複合數目的方法,這是爲了從數組中刪除素數,如我已經說過了。

我已經想出了與第一種方法相關的所有內容。這只是我堅持的第二種方法。

+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中添加,但有個簡單的方法,以實現在以前同樣的效果版本。

答:如果您熟悉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);