Java 有些人帮助弄清楚什么是';我的埃拉托什尼筛有问题吗

Java 有些人帮助弄清楚什么是';我的埃拉托什尼筛有问题吗,java,sieve-of-eratosthenes,Java,Sieve Of Eratosthenes,所以。。。我在实验室遇到了一点问题。我已经做了一段时间了,但我的程序没有达到我期望的效果。我目前正在用Java编写一个Eratosthenes筛程序。不幸的是,它没有给出素数列表的预期输出。我不能,为了我的生命,找出什么是错的。。。这里有没有人能给我一个指示,说明我可能把事情搞砸了 非常感谢 import java.util.*; import java.math.*; public class primeSieve { /** * @param args */ public stat

所以。。。我在实验室遇到了一点问题。我已经做了一段时间了,但我的程序没有达到我期望的效果。我目前正在用Java编写一个Eratosthenes筛程序。不幸的是,它没有给出素数列表的预期输出。我不能,为了我的生命,找出什么是错的。。。这里有没有人能给我一个指示,说明我可能把事情搞砸了

非常感谢

import java.util.*;
import java.math.*;
public class primeSieve {

/**
 * @param args
 */ 

public static void main(String[] args){
    // TODO Auto-generated method stub
    Scanner kb = new Scanner(System.in);

    //Get user input
    System.out.println("Please enter the first number of the set of numbers to calculate primes (first number MUST be prime):");
    int first = kb.nextInt();

    System.out.println("Please enter the last number of the set of numbers to calculate primes (first number MUST be prime):");
    int last = kb.nextInt();

    List<Integer> primeList = new ArrayList<Integer>();
    List<Integer> numList = new ArrayList<Integer>();

    //Make array with values from 2 to the last value entered by user
    for(int i = 2; i <= last; i++){
        numList.add(i);
    }

    int size = numList.size();

    //Calculate primes
    for(int i = 0; i < size; i++)
    {   
        if(i != 0 && i % 2 == 0){continue;} //No point in checking even numbers
        if(numList.get(i) == 0){continue;}  //If a value has been removed, it's been set to 0. No need to check it.

        int prime = numList.get(i);         //The current number being worked on. Should be prime
        primeList.add(prime);               //The number is prime, put it into the prime list.
        for(int j = prime; j < size; j += prime) //Loop to remove multiples
        {
            numList.set(j, 0);  //Number is a multiple of the prime previously calculated. Set it to 0, not a prime.
        }
    }
    int primeSize = primeList.size();   
    System.out.println(primeSize);
    System.out.println("The prime numbers from " + first + " to " + last + " are:");
    for(int i = first; i < primeSize; i++)
    {
        System.out.println(primeList.get(i));
    }
}       
import java.util.*;
导入java.math.*;
公共类素数筛{
/**
*@param args
*/ 
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
扫描仪kb=新扫描仪(System.in);
//获取用户输入
System.out.println(“请输入要计算素数的数字集的第一个数字(第一个数字必须是素数):”;
int first=kb.nextInt();
System.out.println(“请输入要计算素数的数字集的最后一个数字(第一个数字必须是素数):”;
int last=kb.nextInt();
List primeList=新的ArrayList();
List numList=new ArrayList();
//使用从2到用户输入的最后一个值的值创建数组

对于(INTI=2;i在<<代码>循环中< <代码> >代码> > <代码> Prime<代码>。但是,考虑Prime 2:在索引0,而不是索引2。如果在 Prime<1/代码>下开始<代码> J <代码>,事情应该解决。此外,作为一个评论者指出,打印循环应该从索引0开始而不是<代码>第一< /代码>。

对于输出,请尝试-->For(int i=0;inumList
从2开始,因此数字的索引与该列表中的值不匹配。实际上,该列表中不需要任何值(您将其用作筛选),只需要0和1。我认为这样做时会有点混淆“numList.set(j,0)”。您知道,j从素数值开始,而不是从列表索引开始