Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修复不断重复的“11”_Java_Loops - Fatal编程技术网

Java 如何修复不断重复的“11”

Java 如何修复不断重复的“11”,java,loops,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到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。。。重复正确的次数,但只重复一个值。

就像其他人在这里重复的一样,在这种情况下,您实际上不需要静态字段。局部变量就足够了。另外,考虑CykNUM方法正在做什么。之所以总是看到11被打印,是因为checkNum返回的整数是11,直到if语句中的条件revnum,n==n返回true为止

例如,当i=10时,条件revNum10,10==10将返回false,从而返回并打印isReverse或0。当i=11时,条件revNum11,11==11将返回true,因此isReverse被设置为11并打印出来。当i=12时,条件revNum12,12==12将返回false。由于在这种情况下isReverse不会改变,因此返回并打印该变量的当前值11。随着循环的进行,11的11个实例将被打印出来,因为下一次revNumn,n==n返回true时是n=22

您应该改为将checkNum的返回类型更改为boolean,以检测此条件何时返回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);
         }
    }
}

你试过调试吗?在我看来,isReverse设置为11,然后在调用checkNumI时反复返回,我没有资格使用它是的1消除两个静态变量2不要对称为isBlah的变量使用int;3@daniu什么调试器?这里不需要调试器。使用调试器深入研究这件事是浪费时间。你应该为temp和isReverse使用局部变量,而不是静态字段。