ArrayList =查找复合数或素数

时间:2016-12-15 03:01:27

标签: java

我正在研究一个主要涉及因素的“ArrayListFunHouse”程序。

有两种方法:一种方法,用于查找除数字本身之外的每个数字的因子,以及另一种方法,用于查找哪些因子是复合和/或素数,以及从数组中删除所有素数。 / p>

这是主程序:

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 个答案:

答案 0 :(得分: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);

请注意,在Java 8中添加了removeIf,但在以前的版本中可以轻松实现相同的效果。

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

没有理由对集合进行排序,因为它已经按照构造进行了排序。

答案 1 :(得分:0)

Try this for the method keepOnlyCompositeNumbers.




public static ArrayList<Integer> keepOnlyCompositeNumbers( List<Integer> nums)
       {
           List<Integer> compositeList=new ArrayList<Integer>();
           for(Integer num:nums){
               int count=0;
               for(int i=2;i<num;i++){
                   if(num%i==0){
                       count++;
                   }

                   }

               if(count!=0){
                   compositeList.add(num);

               }
               }
           return (ArrayList<Integer>) compositeList;
           }

}

尝试此操作来打印这些复合数字。

        System.out.println( list );
        List<Integer> compositeList1=new ArrayList<Integer>();
        compositeList1= ArrayListFunHouse.keepOnlyCompositeNumbers( list );
        System.out.println( compositeList1 );