java - Project Euler #4 ArrayList 不添加整数

标签 java arraylist collections

我目前正在尝试解决一些 Project Euler 问题。我不明白为什么 ArrayList 不添加整数。

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;
    }
}  

这些是我得到的异常。

Exception in thread "main" java.util.NoSuchElementException
    at java.util.ArrayList$Itr.next(ArrayList.java:854)
    at java.util.Collections.max(Collections.java:669)
    at largestPalindromeProduct.main(largestPalindromeProduct.java:18)

最佳答案

您的 isPalindrome 方法一直返回 false all 因为您正在比较类型 StringBuilder 和类型 StringString#equals因此 没有 将被添加到 ArrayList,这意味着 String#equals不仅要比较被比较对象的内容,还要比较它们的类型,这就是问题所在,被比较的对象可能具有相同的内容但是,因为一个是类型 String,另一个是 StringBuilder 类型,if 条件将总是结果为 false。

解决该问题的方法是使用 String#contentEquals在比较之前,它不进行类型检查或将 StringBuilder 转换为类型 String

选项 1 -

if (newN.contentEquals(sBuilder.reverse()))

选项 2 -

if (newN.equals(sBuilder.reverse().toString()))

实际上,如果您使用的是现代 IDE 之一,您应该会收到一条警告,提示您正在比较不可转换类型的对象。您应该考虑使用 IDE(例如 IntelliJ IDEA)来防止将来出现此类错误。

关于java - Project Euler #4 ArrayList 不添加整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43852579/

相关文章:

java - 随机 URL 在网站中造成泛滥

java - 保存到桌面的图像会覆盖之前的图像

arrays - Swift-如何动态创建标签

java - 创建一个灵活的临时游戏数据存储系统

java - 检查数组列表中先前的输入

java - 如何在 Hybris 灵活搜索查询中使用日期?

java - 什么是堆写入流量以及为什么在 ArrayList 中需要它?

使用模板围绕任何集合类型的 C++ 包装器

c# - 如何将对象列表转换为二级字典?

c# - 如何检查 ObservableCollection 中的重复项?