Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java I';I’我试图从arraylist中删除所有素数,但什么都没有打印出来?_Java_Arrays - Fatal编程技术网

Java I';I’我试图从arraylist中删除所有素数,但什么都没有打印出来?

Java I';I’我试图从arraylist中删除所有素数,但什么都没有打印出来?,java,arrays,Java,Arrays,我是个新手,所以我为任何愚蠢的错误道歉 代码如下: public static void keepOnlyCompositeNumbers( List<Integer> nums ){ int num=0; boolean isPrime=true; for(int i=0; i<nums.size(); i++){ num=nums.get(i); { for (int o = 2; o

我是个新手,所以我为任何愚蠢的错误道歉

代码如下:

    public static void keepOnlyCompositeNumbers( List<Integer> nums ){

    int num=0;
    boolean isPrime=true;
    for(int i=0; i<nums.size(); i++){
        num=nums.get(i);
        {
            for (int o = 2; o < num; ++i)
            {
                if (num % o == 0){
                    isPrime=false;
                    o=2;        
                    if(isPrime==true){
                                nums.remove(num);
                            }
                }


            }


}
公共静态void keepOnlyCompositeNumbers(列表nums){
int num=0;
布尔值isPrime=true;
对于(int i=0;i您可以这样使用:

public static void keepOnlyCompositeNumbers( List<Integer> nums ){
  boolean isPrime=false;
  for(int i=0;i<nums.size();i++){
  isPrime = checkPrime(nums.get(i));
    if(isPrime){
        nums.remove(i);
    }
  System.out.println(nums);
}
boolean checkPrime(int n) {
        for(int i=2;i<n;i++) {
            if(n%i==0)
                return false;
        }
        return true;
}
公共静态void keepOnlyCompositeNumbers(列表nums){
布尔isPrime=false;

对于(int i=0;i更有效的校验素数

boolean checkPrime(int n) {
        for(int i=2;i<=n/2;i++) {
            if(n%i==0)
                return false;
        }
        return true;
}
布尔校验素数(int n){
对于(inti=2;i请看一看

public static void main(String[] args) throws IOException {
        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("Original List => " + list);
        keepOnlyCompositeNumbers(list);
        System.out.println("FInal List => " + list);
    }

    public static void keepOnlyCompositeNumbers(List<Integer> nums) {

        for (int i = 0 ; i < nums.size() ; i++) {
            if (isPrime(nums.get(i))) {
                nums.remove(i);
            }
        }
    }

    public static boolean isPrime(int number) {
        for (int i = 2 ; i < number ; i++) {
            if (number % i == 0) {
                return false; // number is divisible so its not prime
            }
        }
        return true; // number is prime now
    }
publicstaticvoidmain(字符串[]args)引发IOException{
整数[]nums={2,6,8,9,10,12,13,15,17,24,55,66,78,77,79};
List List=newarraylist(Arrays.asList(nums));
System.out.println(“原始列表=>”+列表);
KeeponlyCompositeEnumber(列表);
System.out.println(“最终列表=>”+列表);
}
公共静态void keepOnlyCompositeNumbers(列表nums){
对于(int i=0;i
输出

原始列表=>[2,6,8,9,10,12,13,15,17,24,55,66,78,77, 79]

最终列表=>[6,8,9,10,12,15,24,55,66,78,77]


从Sarz的答案来看,类似这样的东西应该对CheckPrime更有效:

public static void keepOnlyCompositeNumbers( List<Integer> nums ){
  boolean isPrime=false;
  for(int i=0;i<nums.size();i++){
  if ( checkPrime(nums.get(i), nums)) 
        nums.remove(i);
}
boolean checkPrime(int n, List <Integer> primes) {
    sqrtn = Math.sqrt(n) ;
    for (Integer p : primes) {
        if (p > sqrtn) 
             return true;
        if (n % p == 0)
             return false
    }
}
公共静态void keepOnlyCompositeNumbers(列表nums){
布尔isPrime=false;
for(int i=0;i sqrtn)
返回true;
如果(n%p==0)
返回错误
}
}

这里有许多错误。可能还有其他错误

   num=nums.get(i);
    {
        for (int o = 2; o < num; ++i)
        {
            if (num % o == 0){
                isPrime=false;
                o=2;        
                if(isPrime==true){
                            nums.remove(num);
                        }
            }


        }
第一次通过循环,
i
是0,
num
是10。假设我们决定10需要删除。因此我们删除它。列表现在是[20,30,40]。然后我们返回,将
i
增加到1,并将
num
设置为
列表。获取(1)
——现在是30!因此我们从未查看元素20

<>有很多方法来写这个不同的东西。我不喜欢在<代码>的中间改变索引< < /Cult>循环,所以我会这样做:

int i = 0;
while (i < list.size()) {
    num = list.get(i);
    if (needToDelete(num)) {
        list.remove(i);
    } else {
        i++;
    }
}
inti=0;
而(i
请注意,仅当我没有从列表中删除某个元素时,我才递增
I
。如果我这样做,
I
将保持不变,并且现在将是下一个元素的索引,因为我删除了前面的元素。

1)将布尔值isPrime=true;放入for循环内部。
1) Put boolean isPrime = true; inside for loop. 
2) in for(int o = 2; o < num; ++i) // change ++i to ++o 
3) comment out o=2;  //o=2 and put a break;
4) put nums.remove(i); outside for loop

public static void keepOnlyCompositeNumbers(List<Integer> nums) {
int num = 0;
for (int i = 0; i < nums.size(); i++) {
    boolean isPrime = true;
    num = nums.get(i);
    {
    for (int o = 2; o < num; ++o) {
        if (num % o == 0) {
        isPrime = false;
        // o=2;
        break;
        }

    }
    if (isPrime == true) {
        nums.remove(i);
    }

    }
}
}
2) 在for中(into=2;o
这永远无法工作
isPrime=false;num=2;if(isPrime==true){nums.remove(num);}
你用来检查素数的条件是错误的,在这里使用数组列表是愚蠢的。为了让你的生活更轻松,使用布尔数组。我对这个问题的大多数答案都感到很沮丧。提问者在他的代码中犯了一些错误,我们有机会帮助他了解他的错误,以便他可以在将来避免它们。相反,这里的大多数人都宁愿炫耀他们知道如何更好地编写代码。祝贺你。但没有帮助。“没有打印。有人能告诉我我做错了什么吗?”这并不能解释为什么OP的代码没有输出任何东西。“什么都没有打印。有人能告诉我我做错了什么吗?”这并不能解释为什么OP的代码没有输出任何东西。为什么是n/2?为什么不利用你已经积累的素数列表?如果不从2检查到n,我们可以从2检查到n/2,但为什么是n/2,当你只需要检查到sqrt(n)时?(如果pq=n,则p,q中至少有一个小于或等于n的平方根)
List<Integer> list = new ArrayList<>(Arrays.asList(10, 20, 30, 40));
for (int i = 0; i < list.size(); i++) {
    int num = list.get(i);
    if (needToDelete(num)) {
        list.remove(i);
    }
}
int i = 0;
while (i < list.size()) {
    num = list.get(i);
    if (needToDelete(num)) {
        list.remove(i);
    } else {
        i++;
    }
}
1) Put boolean isPrime = true; inside for loop. 
2) in for(int o = 2; o < num; ++i) // change ++i to ++o 
3) comment out o=2;  //o=2 and put a break;
4) put nums.remove(i); outside for loop

public static void keepOnlyCompositeNumbers(List<Integer> nums) {
int num = 0;
for (int i = 0; i < nums.size(); i++) {
    boolean isPrime = true;
    num = nums.get(i);
    {
    for (int o = 2; o < num; ++o) {
        if (num % o == 0) {
        isPrime = false;
        // o=2;
        break;
        }

    }
    if (isPrime == true) {
        nums.remove(i);
    }

    }
}
}