我正在研究一个主要涉及因素的“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 );
依赖于复合数字方法,它应该从数组中删除素数,正如我已经说过的那样。
我已经找到了与第一种方法相关的所有内容。这只是我坚持的第二种方法。
答案 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 );