我尝试让代码打印范围为(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……(重复正确的次数,但只有一个值)。
发布于 2019-04-10 03:56:13
与其他人一样,在这种情况下,您并不真正需要静态字段。局部变量就足够了。另外,考虑一下checkNum方法正在做什么。您总是看到打印11的原因是因为在if语句revNum(n,n) == n中的条件返回true之前,从checkNum返回的整数是11。
例如,当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的返回类型更改为boolean,以检测此条件何时返回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);
}
}
}https://stackoverflow.com/questions/55600125
复制相似问题