项目Euler#4 ArrayList不添加整数

时间:2017-05-08 16:19:54

标签: java arraylist collections

我正在尝试解决目前的一些项目欧拉问题。我无法弄清楚为什么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;
    }
}  

2 个答案:

答案 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 newNStringBuilder sBuilder进行比较。 您必须首先将StringBuilder转换为String,否则它们将永远不会被视为相等:

if (newN.equals(sBuilder.reverse().toString())) {
    return true;
} else {
  return false;
}