Как и другие, здесь не нужны статические поля в этом случае. Локальных переменных будет достаточно. Также рассмотрим, что делает метод checkNum
. Причина, по которой вы всегда видите, что 11 печатается, заключается в том, что целое число, возвращаемое из checkNum
, равно 11, пока условие в вашем операторе if, revNum(n,n) == n
, не вернет true.
Например, когда i = 10, условие revNum(10,10) == 10
вернет false, и, таким образом, isReverse
или 0 будет возвращено и напечатано. Когда i = 11, условие revNum(11,11) == 11
вернет true, и, таким образом, isReverse
устанавливается в 11 и распечатывается. Когда я = 12, условие revNum(12,12) == 12
вернет ложь. И поскольку isReverse
не изменится в этом случае, текущее значение этой переменной 11 возвращается и распечатывается. Поскольку цикл продолжается, 11 экземпляров из 11 будут распечатаны, потому что в следующий раз revNum(n,n) == n
вернет true, когда n = 22.
Вместо этого вы должны изменить тип возврата checkNum
на логический, чтобы определить, когда это условие возвращает true. И когда это произойдет, только тогда вы должны напечатать число i
в цикле в вашем основном методе, чтобы вы могли видеть, какие числа в диапазоне вашего цикла являются палиндромными.
// these variables are not really necessary
// int temp = 0;
// int isReverse;
public static int revNum(int d, int n){
int temp = 0;
for (int i = 0; i<(Math.log10(d)); i++) {
temp *= 10;
temp += n%10;
n = (n - (n%10))/10;
}
return temp;
}
public static boolean checkNum(int n) {
return revNum(n,n) == n;
}
public static void main(String[] args) {
for(int i = 10; i <1000; i++) {
if(checkNum(i)) {
System.out.println(i);
}
}
}