Было бы лучше и проще анализировать код с добавлением правильных методов, которые явно дают подсказку о том, что они делают.это избавит от необходимости полагаться на глобальные переменные таким опасным способом, когда им нужно сбрасывать в циклах, что мы склонны забывать.
определяют три метода: один для суммирования цифр, один для суммированияквадраты цифр и один, чтобы проверить, является ли число простым.после этого поиск ошибок будет проще, поскольку вы будете отлаживать отдельные методы.
проверьте следующее переписывание:
static int sumOfDigits(int number){
int sum = 0;
while (number != 0) {
sum += number % 10;
number /= 10;
}
return sum;
}
static int sumOfSquaresOfDigits(int number){
int sum = 0;
int digit=0;
while (number != 0) {
digit=number % 10;
sum += digit*digit;
number /= 10;
}
return sum;
}
static boolean isPrime(int number) {
//check if n is a multiple of 2
if (number%2==0) return false;
//if not, then just check the odds
for(int i=3;i*i<=number;i+=2) {
if(number%i==0)
return false;
}
return true;
}
теперь, когда эти методы определены, код становится таким:
int count=0;
int lb=1;
int ub=20;
for(int j = lb; j <= ub ; j++)
if ( isPrime(sumOfDigits(j)) && isPrime(sumOfSquaresOfDigits(j)) )
count++;
System.out.println(count);
Примечание: код для суммирования цифр был взят из здесь , и я изменил его, чтобы сделать версию для суммирования квадратов.
код для проверки простого числа был взят из здесь