我正在尝试解决目前的一些项目欧拉问题。我无法弄清楚为什么ArrayList不会添加整数。
$("#sidebar div.find-tabs ul li .block.marginB5").append(":international Patients:<br />904.399.6518 (ext 164)</p>");
这些是我得到的例外情况。
import java.util.ArrayList;
import java.util.Collections;
public class largestPalindromeProduct {
public static void main(String[] args) {
ArrayList<Integer> largestPalindrome = new ArrayList<Integer>();
for (int x = 999; x >= 100; x--) {
for (int y = 999; y >= 100; y--) {
int result = x * y;
if(isPalindrome(result)) {
largestPalindrome.add(result);
break;
// System.out.println("Added Palindrome: " +result);
}
}
}
System.out.println(Collections.max(largestPalindrome));
}
public static boolean isPalindrome(int n) {
String newN = Integer.toString(n);
// System.out.println("newN =" +newN);
StringBuilder sBuilder = new StringBuilder(newN);
// System.out.println("sBuilder reverse = " +sBuilder.reverse());
if (newN.equals(sBuilder.reverse())) {
return true;
} else return false;
}
}
答案 0 :(得分:3)
您的isPalindrome
方法返回false 所有时间,因为您要将类型StringBuilder
和类型String
与{{3}进行比较因此没有将被添加到ArrayList中,这意味着String#equals
不仅要比较被比较对象的内容,还要比较它们的类型,这就是问题发生的地方,被比较的对象可能具有相同的内容但是,因为一个是String
类型而另一个是StringBuilder
类型,if
条件将总是导致错误。
解决此问题的解决方法是使用String#contentEquals
进行类型检查,或在比较之前将StringBuilder
转换为String
类型。
选项1 -
if (newN.contentEquals(sBuilder.reverse()))
选项2 -
if (newN.equals(sBuilder.reverse().toString()))
实际上,如果您正在使用其中一个现代IDE,那么您应该发出警告,要求您比较不可转换类型的对象。您应该考虑使用诸如IntelliJ IDEA之类的IDE来防止将来出现错误。
答案 1 :(得分:0)
String newN = Integer.toString(n);
StringBuilder sBuilder = new StringBuilder(newN);
if (newN.equals(sBuilder.reverse())) {
return true;
} else {
return false;
}
您正在将String newN
与StringBuilder sBuilder
进行比较。
您必须首先将StringBuilder转换为String,否则它们将永远不会被视为相等:
if (newN.equals(sBuilder.reverse().toString())) {
return true;
} else {
return false;
}