我一直在为这个代码工作,需要找到用户所需数量的回文素数。当我有while(primeCounter< desiredNumPrimes)时,一切正常,除了它输出一个小于所需数量的素数。我试图通过将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 && 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);
}
}
答案 0 :(得分:0)
问题在于初始化。以下3个更改将解决此问题。您正在尝试使用arrayindexoutofbounds,因为您尝试仅更改初始化而不是分配
int primeCounter with 0
int[] palPrimes = new int[desiredNumPrimes];
palPrimes[primeCounter]= numberToCheck;
答案 1 :(得分:0)
启动主要计数器为0,因为您还没有找到任何素数。
int primeCounter=0, numberToCheck=2;
你使palPrimes 1的大小小于所需的素数数量,因此它永远不能包含所需数量的素数。取而代之的是
int[] palPrimes = new int[desiredNumPrimes];
然后,检查palPrimes [primeCounter-1] = numberToCheck; 看到我们在0处开始计数器,这应该改为:
palPrimes[primeCounter] = numberToCheck;
该计划应该有效。