Является ли кто-то способным объяснить, почему я получаю исключение из диапазона за пределами 50 000 номеров, тогда как для 40 000 номеров код работает нормально. Код представляет собой алгоритм Эратосфена для получения простых чисел.Индекс массива из границ (Seat of Eratosthenes)
public static void primeThree (int number) {
long startTime = System.currentTimeMillis();
ArrayList<Integer> myList = new ArrayList<Integer>();
boolean[] p = new boolean[number + 1];
for(int i = 2; i < p.length; i++) {
p[i] = true;
}
for(int i = 2; i < p.length; i++) {
if (p[i] == true) {
myList.add(i);
for(int j = 2; j < p.length; j++) {
if ((i * j) < number) {
p[j * i] = false; //line number 99
}
}
}
}
long endTime = System.currentTimeMillis();
System.err.print(endTime - startTime); //prints time taken
System.out.println(myList.toString());
}
Вот описание ошибки:
java.lang.ArrayIndexOutOfBoundsException: -2147446155 на PrimeNumbers.primeThree (PrimeNumbers.java:99)
'java.lang.ArrayIndexOutOfBoundsException: -2147446155' кричит целое переполнение на меня. –
Было бы проще протестировать ваш код, если бы конечная фигурная скобка внутри разделов тегов и кодов (открытая и закрывающая фигурные скобки) была отклонена последовательно. – hobs