如何修复不断重复的“ 11”问题

时间:2019-04-09 19:38:23

标签: java loops

我正在尝试使代码打印回文数(在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 ...(重复正确的次数,但是只有一个值)。

1 个答案:

答案 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);
         }
    }
}