#java #exception
#java #исключение
Вопрос:
Я работал над этим кодом для класса, которому необходимо найти желаемое количество простых чисел палиндромных чисел. Все работает нормально, когда у меня есть while(primeCounter < желаемое число простых чисел), за исключением того, что он выводит на единицу меньше желаемого числа простых чисел. Я пытаюсь исправить это, указав вместо оператора while значение «<=», но затем я получаю исключение индекса массива вне границ. Как вы можете видеть, я даже проверяю, чтобы убедиться, что индекс массива не меньше индекса, который я пытаюсь использовать в операторе if
Любая помощь приветствуется.
import java.util.Scanner;
public class PalPrimes
{
public static void main(String [] args){
Scanner scan = new Scanner(System.in);
int primeCounter=1, numberToCheck=2; //start checking at 2 because primes >1
System.out.println("Please enter the desired number of palindromic primes");
int desiredNumPrimes = scan.nextInt();
int[] palPrimes = new int[desiredNumPrimes-1];
System.out.print(palPrimes.length);
//find palindromic primes
while(primeCounter<desiredNumPrimes){
if(isPrime(numberToCheck)==true amp;amp; isPalindrome(numberToCheck)==true){
palPrimes[primeCounter-1]= numberToCheck;
numberToCheck ;
primeCounter ;
}
else{
numberToCheck ;
}
}
//display palindromic primes
if(primeCounter==desiredNumPrimes){
for(int i = 0; i<palPrimes.length; i ){
if(i%10==0){
System.out.println();
}
System.out.print(palPrimes[i] " ");
}
}
}
//Check if number is a prime
public static boolean isPrime(int num){
if(num == 2){
return true;
}
for( int divisor = 2; divisor <= num/2; divisor ){
if (num % divisor ==0){
return false;
}
}
return true;
}
//reverse number to begin testing if palindrome
public static int reverse(int num){
int testNum = 0;
while(num !=0){
int lastDigit = num%10;
testNum = testNum*10 lastDigit;
num = num/10;
}
return testNum;
}
//Check if number is a palindrome
public static boolean isPalindrome( int num){
return num == reverse(num);
}
}
Комментарии:
1. Спасибо вам обоим. Моя логика в выборе запуска простого счетчика с 1, потому что я начинал свой номер для проверки с 2 (который является простым числом) Я думаю, это то, что мешало мне увидеть это.
Ответ №1:
Проблемы связаны с инициализациями. Следующие 3 изменения устранят проблему. Вы получаете arrayindexoutofbounds, поскольку пытаетесь изменить только инициализацию, но не назначение
int primeCounter with 0
int[] palPrimes = new int[desiredNumPrimes];
palPrimes[primeCounter]= numberToCheck;
Ответ №2:
Запустите счетчик простых чисел с 0, поскольку вы еще не нашли ни одного простого числа.
int primeCounter=0, numberToCheck=2;
Вы делаете размер palPrimes 1 меньше желаемого количества простых чисел, поэтому он никогда не сможет содержать желаемое количество простых чисел. Вместо этого сделайте это
int[] palPrimes = new int[desiredNumPrimes];
Затем вы проверяете наличие palPrimes[primeCounter-1] = numberToCheck;
Поскольку мы запустили счетчик с 0, его следует изменить на:
palPrimes[primeCounter] = numberToCheck;
И программа должна работать.