我很难弄清楚为什么我的代码不能工作。本质上,我正在尝试编写Project Euler #4,它试图找出可以通过将两个三位数相乘而获得的最大回文数。这段代码似乎不能工作(它可以编译)。每当我执行代码时,它只打印"0“。我知道它在算法上可能不是很有效,但是我做错了什么?
public class Palindrome {
public static void main (String [] args) {
int largestnum = 0;
Palindrome pp = new Palindrome();
for (int i = 100; i <= 999; i++) {
for (int k = 100; k <= 999; k++) {
if (pp.checkPal(i * k) == true) {
largestnum = i * k;
}
}
}
System.out.println(largestnum);
}
public boolean checkPal(int y) {
String snum = Integer.toString(y);
int snum_length = snum.length() - 1;
String palindrome = new String("");
for (int i = snum_length; i >= 0; i--) {
palindrome.concat(Character.toString(snum.charAt(i)));
}
if (snum.equals(palindrome)) {
return true;
}
else {
return false;
}
}
}发布于 2016-07-10 18:01:35
Java中的字符串是不可变的。
您正在执行以下操作:
palindrome.concat(Character.toString(snum.charAt(i)));这是一个表达式,它返回一个由palindrome和Character.toString(snum.charAt(i))连接而成的新字符串。它不修改palindrome。
您可以像这样修复它:
palindrome = palindrome.concat(Character.toString(snum.charAt(i)));尽管使用StringBuffer或StringBuilder来构建字符串会更好。
发布于 2016-07-10 18:01:49
您可能会得到这些空格,因为在checkPal函数中有一条print语句。
https://stackoverflow.com/questions/38290586
复制相似问题