为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复“11”不断重复

如何修复“11”不断重复

慕容森 2022-09-28 10:29:30
我试图使代码打印范围内的回文数字(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 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

就像其他人在这里回应的那样,在这种情况下,您并不真正需要静态字段。局部变量就足够了。另外,请考虑该方法正在做什么。您总是看到打印 11 的原因是,从 返回的整数为 11,直到 if 语句 中的条件返回 true。checkNumcheckNumrevNum(n,n) == n


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


相反,您应该做的是将 的返回类型更改为布尔值,以检测此条件何时返回 true。当它发生时,只有这样,您才应该在主方法中打印循环中的数字,以便您可以看到循环范围内的哪些数字是回文的。checkNumi


// 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);

         }

    }

}


查看完整回答
反对 回复 2022-09-28
  • 1 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号