我正在尝试为Eratosthenes筛网创建代码。我收到一个错误:无法将运算符应用于'int []','int'。
我尝试更改代码,并在sieve方法中删除了方括号:
public static int[] sieve(int maximumNumber)
但是我得到了不同的错误消息:SieveOfErathosthenes中的sieve(int)无法应用于(int [])。我该如何解决?
public class SieveOfEratosthenes {
public static void main(String[] args) {
int[] maximumNumber = {12};
System.out.println(Arrays.toString(sieve(maximumNumber)));
}
public static int[] sieve(int maximumNumber) {
boolean[] prime = new boolean[maximumNumber + 1];
for (int i = 0; i < maximumNumber; i++) {
prime[i] = true;
}
for (int numberIncrement = 2; numberIncrement * numberIncrement <= maximumNumber; numberIncrement++) {
if (prime[numberIncrement]) {
for (int i = numberIncrement * numberIncrement; i <= maximumNumber; i += numberIncrement)
prime[i] = false;
}
}
for (int printPrimes = 2; printPrimes <= maximumNumber; printPrimes++) {
if (prime[printPrimes])
System.out.print(printPrimes + " ");
}
return sieve(maximumNumber);
}
}
我的任务说:
该函数应将一个数字作为参数-我们将搜索的最大数字限制为最大数,并返回一个整数数组,该整数数组仅包含从1开始并在小于或等于提供的参数的最后一个数字处结束的整数
例如对于输入数字12,您应该返回[2、3、5、7、11] 方法签名:int [] sieve(int maximumNumber) 编写简单解决方案的步骤:
1)声明一个int数组-大小应取决于maximumNumber参数
2)用数字填充数组:array [i] = i
3)编写循环以删除特定数字的倍数->如果您有问题,请首先编写一个循环以删除2的倍数,然后编写一个循环以删除3的倍数,并注意如何将其更改为a通用循环(您应该有2个嵌套循环)
4)将循环计算主数的数量写在数组中
5)为上一步中计算出的大小的结果声明一个数组
6)用原始数组中不为零的这些元素填充结果数组:)
7)返回结果数组