gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:30:50 24 4
gpt4 key购买 nike

我目前正在尝试解决一些 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com