[英]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.