使用布尔函数在Java中实现素筛

使用布尔函数在Java中实现素筛,java,debugging,compiler-errors,boolean-operations,Java,Debugging,Compiler Errors,Boolean Operations,我试图在Java中实现一个素数筛,这样我就可以算出所有素数的总和小于某个最大值。我试着用一个方法PrimeSieve和一个布尔数组来实现它,如果这个数是复合数,我会通过取一个质数并考虑所有小于最大值的整数倍来实现 但我在尝试运行程序时不断遇到编译器错误,我无法找出错误: 主线程java.lang中出现异常。错误:未解决的编译问题: 语法错误,请插入。类来完成表达式 表达式的类型必须是数组类型,但已解析为类 令牌i上出现语法错误,请删除此令牌 语法错误,请插入。类来完成表达式 表达式的类型必须是数

我试图在Java中实现一个素数筛,这样我就可以算出所有素数的总和小于某个最大值。我试着用一个方法PrimeSieve和一个布尔数组来实现它,如果这个数是复合数,我会通过取一个质数并考虑所有小于最大值的整数倍来实现

但我在尝试运行程序时不断遇到编译器错误,我无法找出错误:

主线程java.lang中出现异常。错误:未解决的编译问题: 语法错误,请插入。类来完成表达式 表达式的类型必须是数组类型,但已解析为类 令牌i上出现语法错误,请删除此令牌 语法错误,请插入。类来完成表达式 表达式的类型必须是数组类型,但已解析为类 在Problem3.primeSiveProblem3.java:11 在Problem3.mainProblem3.java:26

如果您能帮助解决这些错误,我们将不胜感激。

您有两个问题: 1您可以使用类型的名称而不是数组的名称。 所以布尔[i]应该变成isPrime[i]。 Java不把2i理解为两次i。你需要写2*i

这将使您的代码编译:

 for (int i = 0; i < max; i++) {
                    if (!isPrime[i]) {
                        for (int j = 2*i; j < max; j += i) {
                            isPrime[j] = true;
                        }
                    } else {}  // By the way - This is really not necessary
                }

永远不要尝试运行未编译的代码。首先修复编译器告诉您的错误,而不是JVM。请在此处发布完整的编译器错误消息。请遵守命名约定,方法名称以小写字母开头,大写字母仅用于类名。所以它应该是primeSieve而不是primeSieve,因为这是一个方法,而不是像Problem3.if这样的类!boolean[i]{这没有任何意义。您需要在那里使用数组名,而不是类型名。错误消息会再次告诉您问题在这里,您应该在尝试运行之前校对该行。投票关闭是一个小错误/键入错误
 for (int i = 0; i < max; i++) {
                    if (!isPrime[i]) {
                        for (int j = 2*i; j < max; j += i) {
                            isPrime[j] = true;
                        }
                    } else {}  // By the way - This is really not necessary
                }