import java.util.ArrayList;
public class LargestPrimeFactor {
private static long maxNum;
public LargestPrimeFactor(long maxNum) {
LargestPrimeFactor.maxNum = maxNum;
ArrayList<Long> listOfPrimes = new ArrayList<>();
listOfPrimes.add(2L);
for (long i = 3; i < maxNum / 2; i++) {
if (i % 2 == 1 && isPrime(i)) {
listOfPrimes.add(i);
}
}
// for (long i = 0; i < listOfPrimes.size(); i++) {
// System.out.println(listOfPrimes.get((int) i));
// }
for (long i = listOfPrimes.size() -1; i >= 0; i--) {
if (maxNum % ((long) listOfPrimes.get(i)) == 0) {
System.out.println("Max Prime Factor is: " + listOfPrimes.get(i));
break;
}
// System.out.println(listOfPrimes.get((int) i));
}
}
private boolean isPrime(long num) {
for (long i = 2; i < num; i++ ) {
if (num % i == 0) {
return false;
}
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码中的问题如下: enen 如果我自动装箱到,Java 需要在我使用时<Long>强制转换为。这是不需要的,因为我将使用的数字超出了范围。我该如何解决这个问题?intlistOfPrimes::get
在这个循环中
for (long i = listOfPrimes.size() - 1; i >= 0; i--) {
if (maxNum % ((long) listOfPrimes.get(i)) == 0) {
System.out.println("Max Prime Factor is: " + listOfPrimes.get(i));
break;
}
}
Run Code Online (Sandbox Code Playgroud)
i您应该将from的类型更改long为int。这并不是说 中 的数字listOfPrimes必须是int,它只是说 中 的元素计数listOfPrimes必须可以用 32 位有符号整数表示。
事实上,listOfPrimes.size()返回一个整数,而不是一个长整型。在 Java 中,数组的长度始终由 指定int。因此,数组不能容纳比int可计数的元素更多的元素。因此, anArrayList也无法容纳更多元素。
此外,该Collection.size()方法返回一个int,因此实现该接口的类都Collection无法保存更多值。
编辑:正如 user16320675 在评论中提到的,集合可以容纳比Integer.MAX_VALUE. 您只需要注意size()在这些情况下返回的内容:它返回Integer.MAX_VALUE而不是实际大小。