2015-02-07 68 views
-1

有沒有辦法在java中創建一個數組,而無需先定義或詢問它的長度? A.k.a用戶輸入一些數字作爲參數,程序創建一個包含多個參數的數組。輸入數組而不知道它的大小

+1

如果程序可以計算參數,那麼它肯定可以創建一個長度的數組。 'new int [count]'。 – 2015-02-07 12:17:38

+0

[在java中輸入數組]可能的重複(http://stackoverflow.com/questions/28383042/entering-array-in-java) – Joe 2015-02-07 14:16:01

+0

不要使用數組,你可以使用ArrayList來代替它,它可以記住和調整自己的大小。 – eckes 2015-02-07 18:14:43

回答

2

有沒有辦法在java中創建數組,而無需先定義或詢問其長度? A.k.a用戶輸入一些數字作爲參數,程序創建一個包含多個參數的數組。

目前還不清楚你是什麼情況。如果你知道在執行時間,但不是在編譯時數組的長度,這很好。

public class Test { 
    public static void main(String[] args) { 
     int length = Integer.parseInt(args[0]); 
     String[] array = new String[length]; 
     System.out.println("Created an array of length: " + array.length); 
    } 
} 

您可以運行爲:

java Test 5 

,它會創建長度爲5

數組如果你真的在你需要創建它之前並不知道數組的長度 - 例如,如果你要向用戶詢問元素,然後讓它們在完成時輸入一些特殊值,那麼你會可能要使用某種List,如ArrayList

例如:

import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

public class Test { 
    public static void main(String[] args) throws Exception { 
     Scanner scanner = new Scanner(System.in); 

     System.out.println("Enter numbers, with 0 to end"); 
     List<Integer> list = new ArrayList<>(); 
     while (true) { 
      int input = scanner.nextInt(); 
      if (input == 0) { 
       break; 
      } 
      list.add(input); 
     } 
     System.out.println("You entered: " + list); 
    }  
} 

可以然後再轉換List到一個數組,如果你真的需要,但最好你可以繼續使用它作爲一個List

1

您需要爲此使用ArrayList。

編輯:

米羅斯拉夫最有可能是一名學生試圖完成的任務。通常在這些作業中,你會被要求從標準輸入中讀取數值,並對它們做些什麼。在這種情況下,將它們存儲在一個數組中。所以,當他有價值存儲在數組中時,他不知道有多少值會到來。所以,ArrayList是要走的路。

+3

這並非完全正確。您可以將int傳遞給創建數組的方法 – 2015-02-07 12:15:32

0

當你只需要添加元素時,ArrayList可能是這種情況下的最佳結構。如果您想要從集合的中間添加/刪除元素,請改用LinkedList。

1

Is there a way to make an array in java, without defining or asking for it's length first ?

是的,有可能在Java中。儘管這在C++中是不可能的。 C++需要在編譯時確定數組的大小。

在Java中,您可以在運行時創建新陣列。

int[] array; //Create a reference of int array (no arrays created yet) 

//Prompt for size.. 
Scanner scn = new Scanner(System.in); 
System.out.println("Enter size of array;") 
int size = scn.nextInt(); 

array = new int[size]; //this is allowed in Java 

一些額外的信息:

注意到,數組大小固定的。一旦確定了大小(即使在運行時),你也不能再改變它了。但是,如果您想「擴展」數組大小,則有解決方案。

//continuing from above coding example.. 
array = new int[newSize]; 

這樣做會將array指向一個新陣列。因此,如果您想保留舊數組的值,則必須手動將舊數組元素複製到新數組中。 但是,這是不高效的。

一種有效的增長和縮小陣列大小的方法是使用ListArrayList。但要在陣列上單獨回答你的問題。是的,您可以在運行時創建它,也可以在運行時將您的數組引用指向另一個數組。

相關問題