我需要一个方法来帮助检查一个数字是否是对称的,所以根据我的理解,我需要检查所有数字之间的相等性,并确保没有不同数量的数量......对吗?
这是我的代码:
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;
}
我对编程很陌生,所以请原谅我的代码:/
谢谢!
答案 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...
}