![](/img/trans.png)
[英]Java: Declaring a multidimensional array without specifying the size of the array ( eg. new int[10][] )
[英]Declaring int[] Array without defining size?
这是我的代码:
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];
但它崩溃了。
没有; 必须提前声明数组的大小。 试着看看List
或Vector
的不同实现。
如果最终你绝对需要一个数组,你可以从List
创建一个数组。
当您不知道阵列的确切大小时, List
最适合情况。 例如,您可以使用ArrayList
。
您必须使用List而不是Array。
编译器需要知道数组的大小。 定义像这样的数组时。 int [] primes = new int [0];
它只为1个整数创建空间。 因此,当您写入primes [1]时,它会创建分段故障信号并导致程序崩溃。
正如其他人所提到的,你可以使用ArrayList
,如果仍然需要输出作为数组,你可以在最后将ArrayList
转换为数组(一旦知道了数组的大小)。
当我们知道要放入的元素的大小和数量时,数组就是针对这种情况的。如果我们不确定大小,那么在这种情况下,Java的Collection API可以帮助你。 例如
列表接口由ArrayList和Vector实现
ArrayList可以在运行时将其大小扩展50%,这样就可以解决您的问题。如果您的应用程序处理线程安全,则可以使用Vector。但是避免使用Vector,因为它在运行时将其大小增加到了两倍。
此代码可能对您有所帮助。
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()+" ");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.