Я пытаюсь написать код, который будет вычислять простые числа с помощью решета Эратосфена. Я должен включить функцию, которая будет принимать число и пересекать все числа, кратные этому числу. Для тестирования я установил первое число равным 2, а второе - 3. Это работает для первого числа, но никогда для второго (независимо от порядка чисел, т.е. если я сначала введу 3 в функцию). Я знаю, что есть и другие завершенные сита Эратосфена, но я хотел попробовать сделать это так, как я придумал в первую очередь.
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("Which number would you like to calculate up to?");
int n = input.nextInt();
input.close();
int x = 0;
int newNumber = 2;
int numbers[] = new int[n];
while(newNumber <= n){
numbers[x] = newNumber;
x++;
newNumber++;
}
int currentNumber = 2;
int finalNumber[] = markOfMultiples(n, numbers, currentNumber);
for(int y = 0;y < n-1;y++){
System.out.print(finalNumber[y] + ", ");
}
currentNumber = 3;
int secondNumber[] = markOfMultiples(n, numbers, currentNumber);
for(int y = 0;y < n-1;y++){
System.out.println(secondNumber[y]);
}
}
public static int[] markOfMultiples(int n, int numbers[], int currentNumber){
int originalNumber = currentNumber;
while(currentNumber<n){
currentNumber = currentNumber + originalNumber;
int count2 = 0;
while(currentNumber != numbers[count2] && currentNumber<=n && count2<n){
count2++;
}
numbers[count2] = 0;
}
return numbers;
}
Я получаю сообщение об ошибке: Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 20
в ситеЭратосфена.ситоЭратосфена.маркамножеств(ситоЭратосфена.java:46)
на ситеЭратосфена.ситоЭратосфена.main(ситоЭратосфена.java:28)
Строка 28, когда я вспоминаю функцию: int secondNumber[] = markOfMultiples(n, numbers, currentNumber);
И строка 46 while(currentNumber != numbers[count2] && currentNumber<=n && count2<20){
Любая помощь приветствуется. Как мне продолжать вызывать функцию?
p.s. Пожалуйста, извините за имена переменных, так как я изменю их, когда программа заработает.