这是我的代码:
int[] primes = new int[25];
for (int i = 2; i <= 100; i++)
{
for (int j = i; j > 0; j--)
{
int prime = i%j;
if (prime == 0)
{
if ((j == i) || (j == 1))
{
isPrime = true;
}
else
{
isPrime = false;
break;
}
}
}
if (isPrime == true){
primes[index] = i;
index++;
}
}
正如您所看到的,我正在将素数写入数组。我计算了2-100范围内的所有素数,所以我将数组大小设置为25。
但是,让我说我不知道有25个素数。有没有办法在不定义大小的情况下创建数组(任何类型的数组)?我试过这个:
int[] primes = new int[0];
但它崩溃了。
答案 0 :(得分:11)
答案 1 :(得分:1)
没有;必须提前声明数组的大小。请尝试查看List
或Vector
的不同实现。
如果你最终需要一个数组,你可以从List
创建一个数组。
答案 2 :(得分:0)
List
最适合情况。例如,您可以使用ArrayList
。
答案 3 :(得分:0)
您必须使用List而不是Array。
编译器需要知道数组的大小。定义像这样的数组时。 int [] primes = new int [0];
它只为1个整数创建空间。因此,当您写入primes [1]时,它会创建分段故障信号并导致程序崩溃。
答案 4 :(得分:0)
正如其他人所提到的,你可以使用ArrayList
,如果仍然需要输出作为数组,你可以在最后将ArrayList
转换为数组(一旦知道了数组)。
答案 5 :(得分:0)
当我们知道要放入的元素的大小和数量时,数组是针对这种情况的。如果我们不确定大小,那么在这种情况下,Java的Collection API可以帮助你。 例如
ArrayList和Vector
实现的List接口ArrayList可以在运行时将其大小扩展50%,这样就可以解决你的问题。如果你的应用程序处理线程安全,你可以使用Vector。但是避免使用Vector,因为它在运行时将其大小增加到了两倍。
答案 6 :(得分:0)
此代码可能会对您有所帮助。
public static void main(String[] args) {
boolean isPrime;
List<Integer> list = new ArrayList<Integer>();
for (int i = 2; i <= 100; i++)
{
isPrime = true;
for (int j = 2; j < i/2; j++)
{
int prime = i % j;
if (prime == 0)
{
isPrime = false;
break;
}
}
if (isPrime == true){
list.add(i);
}
}
// all the prime numbers
for(Iterator<Integer> iterator = list.iterator(); iterator.hasNext();){
System.out.print(iterator.next()+" ");
}
}