簡體   English   中英

在沒有定義大小的情況下聲明int []數組?

[英]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用於未知大小的數據(可能ArrayList將是您的最佳解決方案)。

沒有; 必須提前聲明數組的大小。 試着看看ListVector的不同實現。

如果最終你絕對需要一個數組,你可以從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM