在没有定义大小的情况下声明int []数组?

时间:2013-12-24 15:40:58

标签: java arrays

这是我的代码:

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];

但它崩溃了。

7 个答案:

答案 0 :(得分:11)

您可以将List用于未知大小的数据(可能ArrayList可能是您的最佳解决方案。)

答案 1 :(得分:1)

没有;必须提前声明数组的大小。请尝试查看ListVector的不同实现。

如果你最终需要一个数组,你可以从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()+" ");
    }

}