Java 如何修复不断重复的“11”
我试图使代码打印回文数在10到1000之间,但它一直返回11Java 如何修复不断重复的“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
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使用局部变量,而不是静态字段。