当前位置: 首页 > 知识库问答 >
问题:

使用布尔值在Java中实现素筛

糜征
2023-03-14

我正在尝试在Java中实现一个素数筛,以便我可以计算出小于某个最大值的所有素数的总和。我试图使用PrimeSieve的方法并使用布尔值数组来做到这一点,如果数字是复合的,我通过取一个素数并考虑所有小于最大值的整数倍数来使它成为真。

但是当我试着运行这个程序时,总是出现编译错误,我不知道哪里出了问题:

线程“main”java.lang中出现异常。错误:未解决的编译问题:语法错误,请插入“.class”以完成表达式表达式的类型必须是数组类型,但它在标记“i”上解析为类语法错误,删除此标记语法错误,插入“.class”以完成表达式表达式的类型必须是数组类型,但在Problem3.PrimeSieve(Problem3.6ava:11)

public class Problem3 {

    public static boolean[] PrimeSieve(int max) {

        // automatically all entries are false
        boolean[] isPrime = new boolean[max];

        // when a number isn't prime make the entry true

        for (int i = 0; i < max; i++) {
            if (!boolean[i]) {
                for (int j = 2i; j < max; j += i) {
                    boolean[j] = true;
                }
            } else {}
        }

        // return the isPrime boolean with all the primes as false
        return isPrime;
    }

    public static void main(String[] args) {

        boolean[] Primes = new boolean[100];
        Primes = PrimeSieve(100);

        int i = 0;
        int ans = 0;

        while (i < 100) {
            if (!Primes[i]) {
                ans += i;
                i++;
            } else { 
                i++; 
            }
        }

        System.out.println(ans);
    }
}

任何帮助解决这些错误将不胜感激

共有1个答案

唐增
2023-03-14

你有两个问题:< br> 1)你使用了类型名而不是数组名。< br >因此< code>boolean[i]应改为< code>isPrime[i]。< br> 2) Java不理解< code>2i为“两倍的I”。你需要写那个< code>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
                }
 类似资料:
  • 问题内容: Python实际包含布尔值吗?我知道您可以做到: 但是我相当学究,喜欢在Java中看到布尔值。例如: Python中是否有布尔值之类的东西?我似乎在文档中找不到类似的内容。 问题答案: [编辑] 有关更多信息:http : //docs.python.org/library/functions.html#bool 您的代码也可以工作,因为在需要时会转换为。实际上,Python很长一段时

  • 我被一件简单的事情困住了。我有一个名为“tags”的布尔值数组能够通过布尔值访问数组的每个元素对我来说很重要: 我传入trackTags数组并将布尔值赋给它(比如说[true,true,true,false])。因此,当我调用trackTags[0]时,我得到了“true”但是,当我打印“Energy”(能量)时,它应该与trackTags(0)相同,该值始终为false。我知道booleans

  • 问题内容: 哪种列类型最适合在MySQL数据库中使用布尔值?我用,但我的同事用。 问题答案: 这些数据类型是同义词。

  • 问题内容: 好的,我在代码中实现了这个SO问题:随机返回True或False 但是,我的行为很奇怪:我需要同时运行十个实例,每个实例每次运行仅返回一次true或false。令人惊讶的是,无论我做什么,每次我得到 有什么方法可以改善这种方法,以便我至少有大约50%的机会得到吗? 为了使它更易于理解:我将应用程序构建为JAR文件,然后通过批处理命令运行 程序的内容-使其尽可能简单: 如果我打开10个命

  • 但是这个代码不起作用。编译器说 我在试图理解代码的问题是什么。我认为将返回一个布尔值流,我可以通过收集这些值。

  • 问题内容: 在Java中将a转换boolean为an 的最常用方法是什么int? 问题答案: ^^ PS : true = 1 and false = 0