java 不理解我对回文问题的解答

bqjvbblv  于 2022-12-02  发布在  Java
关注(0)|答案(2)|浏览(193)

我正在尝试解决一个问题,你的代码应该确定一个给定的数字是否是回文,我不明白为什么它不工作。
(You我可以跳过这一步,只要阅读代码就可以了)我的想法是,我用整数的值创建一个字符串,然后用这个字符串的长度创建一个for循环,这个循环使用% 10来反转整数,并将其存储在一个单独的字符串中。然后,我会比较这两个字符串,以确定这个数字是否是回文

public static boolean isPalindrome(int x) {
        String s = String.valueOf(x);
        int count = s.length();
        String palindrome = "";
        for(int i = 0; i < count; i++){
            palindrome += x % 10;
        }
        System.out.print(palindrome);
        if(palindrome == s){
            return true;
        }
        else{
            return false;
        }
    }

问题是代码只返回false,当我添加print语句来检查反转的数字(String回文)是什么时,我得到了一个不同的数字。
例如,我使用121来测试它,在for循环之后,print语句输出111。

我并不是真的在寻找解决方案,我只是想了解它为什么会出现这种行为。提前感谢。

wn9m85ua

wn9m85ua1#

for(int i = 0; i < count; i++){
        palindrome += x % 10;
    }

由于x在该循环中(或者实际上在代码中的任何地方)都没有改变,所以每次执行都产生相同的结果,即x的最低有效位。
因此,palindrome具有相同数字的一些拷贝,并且几乎永远不会等于s
每次循环时,都需要将x除以10。

mwngjboj

mwngjboj2#

问题出在你的for循环上,每次循环迭代的时候你都要把x除以10

public static boolean isPalindrome(int x) {
        String numStr = String.valueOf(x);
        StringBuilder palindrome = new StringBuilder();

        for(; x>0; x /=10)  {
            palindrome.append(x % 10);
        }

        return palindrome.toString().equals(numStr);
    }

在这个for循环中,因为不需要索引,所以没有初始化。实际上,你可以用while循环来代替for循环:

while (x>0) {
    palindrome.append(x % 10);
    x /= 10;
}
  • 注意:我也简化了返回。如果两个字符串相等,可以使用equals()方法返回true。*
  • 注意:当您要追加字符串时,使用StringBuilder比使用+=运算符更好。*

相关问题