Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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 我的getPrime()方法无法正常工作。关于如何修复它有什么建议吗?_Java_Primes - Fatal编程技术网

Java 我的getPrime()方法无法正常工作。关于如何修复它有什么建议吗?

Java 我的getPrime()方法无法正常工作。关于如何修复它有什么建议吗?,java,primes,Java,Primes,我正试图编写一个程序来计算用户给定范围内的所有素数。然而,在我的方法中,get primes不能正常工作,因为我一直在获取从2到给定范围的所有数字。有什么建议可以帮我解决吗 import java.util.Iterator; import java.util.Set; import java.util.TreeSet; public class Sieve { private int number; public Sieve (int maxPrime) {

我正试图编写一个程序来计算用户给定范围内的所有素数。然而,在我的方法中,get primes不能正常工作,因为我一直在获取从2到给定范围的所有数字。有什么建议可以帮我解决吗

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;


public class Sieve
{
    private int number;

    public Sieve (int maxPrime)
    {
        number = maxPrime;
    }

    public Set<Integer> getPrimes()
    {
        Set<Integer> setNumbers = new TreeSet<Integer>();

        for(int i=2; i<=number; i++)
        {
            setNumbers.add(i);
        }

        Iterator<Integer> iter = setNumbers.iterator();

        boolean isTrue=false;

        while (iter.hasNext())  //WHILE number is more than one  
        {  
            int number1= iter.next();
            for (int i =2; i<= Math.sqrt(number); i++)
            if (number1 % i == 0)
            {  
                isTrue = true;
                break;
            }   

         } // end while     
         if(isTrue)
         {
             iter.remove();
         }
       return setNumbers;
     }
}
import java.util.Iterator;
导入java.util.Set;
导入java.util.TreeSet;
公共类筛
{
私有整数;
公共筛选(int-maxPrime)
{
数字=最大素数;
}
公共集getPrimes()
{
Set setNumbers=新树集();
对于(int i=2;i

将进入while循环和for循环之外,虽然这不是一个特别有效的算法,但我建议尝试实现这一点,而不是像您看起来正在做的那样设计自己的算法:


您可以在网上找到多个示例版本。

因为这是为了家庭作业,所以让我添加一条与您的答案无关的注释,但这将使您和您的老师/同龄人更容易阅读您的代码:1.始终使用大括号表示for和if。2.用清晰的名称命名变量。IsTrue不表示使用t最后,你应该考虑在你的集合中只添加Primm数,而不是增加所有的数字,并去除那些不是原始数的。如果我只添加素数,那么我是如何产生从2到给定范围的所有数字的?
import java.util.Set;


public class PrimeTest
{

   public static void main(String[] args)
   {
      Sieve sifter = new Sieve(100);
      Set<Integer> primes = sifter.getPrimes();
      System.out.println(primes);
      System.out.println("Expected: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 43, 41, 47, 53, 59, 61, 71, 67, 79, 73, 83, 89, 97]");

   }

}
     if(isTrue)
     {
         iter.remove();
     }
     isTrue = false;
}//End while