java - 为什么此方法存在逻辑错误。isPalindrome(11) 应该返回 true,但它返回 false
问题描述
public static boolean isPalindrome(int number) {
int reverseNumber = 0;
int lastDigit = 0;
if (number < 0) {
number = number * -1;
}
while (number > 0) {
lastDigit = number % 10;
number = number / 10;
if (number == 0) {
reverseNumber += lastDigit;
}
else {
reverseNumber += lastDigit;
reverseNumber *= 10;
}
}
return reverseNumber == number;
}
这个方法应该返回真正的回文,但它没有。
解决方案
number
您在构建时正在“破坏”原件reverseNumber
:
number = number / 10;
因此,在while
-loop 之后,您number
的值为零,并且比较reverseNumber == number
无法按预期进行。false
除非您的反向数字为零,否则它总是如此。
您可以使用新的局部变量来构建reverseNumber
,在循环中对其进行修改,但仍使用原始变量进行number
最终比较:
public static boolean isPalindrome(int number) {
// ... Handle negatives
int tempNumber = number;
while (tempNumber > 0) {
// ...
tempNumber = tempNumber / 10;
// ...
}
return reverseNumber == number;
}
推荐阅读
- php - 使用 FOR EACH 将动态下拉列表作为一列的 PHP ECHO 表
- python - 设置一个变量以在python中的导入中使用
- java - 不推荐使用 getIntent()、getStringExtra()
- python - Python 中的 __peg_parser__ 是什么?
- python-3.x - 如何从bash脚本中获取python文件的变量
- vue.js - 无法解析三个 gltf-loader 中的“三个”
- java - 尝试遍历 XML 文件中非常相似的元素。注意 XML 文件没有属性
- python - Python - 从电子表格中的列中提取数据时条件语句不起作用
- amazon-web-services - 尝试安装 AWS Elastic Beanstalk 获取:ObjectNotFound: (C:\Users\Ameer:String) [], CommandNotFoundException
- javascript - 如何在 NodeJS 中使用 fs 删除扩展名未知的文件?