我正在尝试使代码打印回文数(在10到1000之间),但它始终返回11
public class Problem{
static int temp=0;
static int isReverse;
public static int revNum(int d, int n){
for (int i = 0; i<(Math.log10(d)); i++) {
temp *= 10;
temp += n%10;
n = (n - (n%10))/10;
}
return temp;
}
public static int checkNum(int n) {
if(revNum(n,n) == n) {
isReverse = n;
}
return isReverse;
}
public static void main(String[] args) {
for(int i = 10; i <1000; i++) {
System.out.println(checkNum(i));
}
}
}
我期望输出为11、22、33、44等,但是实际输出为11、11、11 ...(重复正确的次数,但是只有一个值)。
答案 0 :(得分:-1)
就像其他人在这里回声一样,在这种情况下,您实际上不需要静态字段。局部变量就足够了。另外,请考虑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并打印出来。当i = 12时,条件revNum(12,12) == 12
将返回false。并且由于isReverse
在这种情况下不会更改,因此该变量的当前值11将被返回并打印出来。随着循环的进行,将打印出11个实例中的11个实例,因为下一次revNum(n,n) == n
返回true的时候是n = 22。
您应该做的是将checkNum
的返回类型更改为布尔值,以检测此条件何时返回true。而且,只有这样,您才应该在main方法的循环中打印数字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);
}
}
}