我想在我的arraylist中随机输入5个值< BigInteger>。
我将首先要求输入值。该值可以是1-∞。
我意识到代码的问题是,如果我输入一个值> = 500000,程序将启动 抛出堆空间错误。我该如何解决这个问题?
public static void main(String[] args) {
BigInteger p;
p = readBigInteger("Enter a value ");
ArrayList<BigInteger> list = new ArrayList<BigInteger>();
for (BigInteger bi = BigInteger.valueOf(1); bi.compareTo(p) <= 0; bi = bi.add(BigInteger.ONE)) {
list.add(bi);
}
Collections.shuffle(list);
for (BigInteger bi = BigInteger.valueOf(1); bi.compareTo(new BigInteger("5")) <= 0; bi = bi.add(BigInteger.ONE)) {
Integer a = bi.intValue();
System.out.println(list.get(a));
}
}
答案 0 :(得分:2)
基本上,您正在创建与用户输入一样多的BigInteger对象。因此,如果用户提供500000作为输入,那么会有很多BigIntegers。它们占用程序堆中的空间(堆是所有对象的存储空间)。问题是,此存储空间有限,如果没有剩余空间,JVM将取消您的程序。您可以尝试使用JVM命令使堆更大。但你真的需要存储所有那些BigIntegers吗?可能不是。
答案 1 :(得分:0)
所以你想获得指定范围内的5个随机数?使用方法here并调用它5次。