检查Java中数字是否对称的方法

时间:2013-12-06 23:53:54

标签: java

我需要一个方法来帮助检查一个数字是否是对称的,所以根据我的理解,我需要检查所有数字之间的相等性,并确保没有不同数量的数量......对吗?

这是我的代码:

public boolean isSemetric (int number) {

    int temp;
    boolean answer = true;

    while (number != 0) {

        temp = number % 10;
        number /= 10;

        if (temp != (number%10)) {
        answer = false;
        } else { 
            answer = true;
        }

    }

    return answer;

}

我对编程很陌生,所以请原谅我的代码:/

谢谢!

4 个答案:

答案 0 :(得分:4)

正如peter.petrov在你的问题的评论部分指出的那样,你写的方法总是返回false,除了number等于0的时候。原因可能是传递一个像111这样的数字并在调试器中逐步执行代码时看到。最后一次迭代将失败,因为number /= 10将导致0,而temp将导致1,这将导致您的测试失败。

如果您确实希望识别回文,请考虑以下应该易于实施的方法

  1. copy number into temp
  2. convert temp to a String, and reverse it (tmpStr)
  3. convert tmpStr back to an integer (reversedInt)
  4. compare number and reversedInt for equality

中提琴。不是最有效的算法,但它易于理解并完成工作。

答案 1 :(得分:1)

我会这样做(我不想在这里使用String,我不想对数字使用本地数组变量)。

    public static boolean isSymmetric (long number) {
        if (number == 0) return true;
        else if (number < 0) return false;
        long DEG_10 = (long)(Math.pow(10, (int)Math.log10(number)));

        while (number > 0){
            long dStart = number / DEG_10;
            long dEnd = number % 10;
            if (dStart != dEnd) return false;
            number = (number - dStart * DEG_10 - dEnd) / 10;
            DEG_10 /= 100;
        }

        return true;
    }

答案 2 :(得分:0)

这是一个有点修复版本的代码。但是,它会检查所有数字是否相同,例如5555或111. 11211将返回false。

public boolean areAllDigitsTheSame (int number) {

    int temp;
    boolean answer = true;

    while (number >= 10) {

        temp = number % 10;
        number /= 10;

        if (temp != (number%10)) {
            return false
        }
    }

    return true;
}

编辑:C++ answer in the linked question通过在循环中逐渐构建反向数字来工作,最后检查它们是否相同。这与你正在做的类似。

这是另一个有趣的版本:

public boolean isPalindrome (int number) {

    int reversedNumber = 0;
    while (number > 0) {

        int digit = number % 10;
        reversedNumber = reversedNumber*10 + digit;

        if (reversedNumber == number) { // odd number of digits
            return true;
        }

        number /= 10;

        if (reversedNumber == number) { // even number of digits
            return true;
        }
    }

    return false;
}

答案 3 :(得分:0)

这是我能想到的最简单的方法 - 获取数字的字符串值,如果反向相同则对称。

// Symmetry
public static boolean isSymmetric(int number) {
  String val = String.valueOf(number); // Get the string.
  StringBuilder sb = new StringBuilder(val);
  return (val.equals(sb.reverse().toString())); // if the reverse is the same...
}