2016-01-06 43 views
-2

根據我的理解,我們需要在編譯時定義數組大小。但是根據下面的代碼,我們似乎也可以在運行時提供數組大小。我們可以在運行時提到陣列大小嗎?

public class Test { 

    public static void main(String args[]){ 

     Scanner scan = new Scanner(System.in); 

     int length= scan.nextInt(); 

     int arr[] = new int[length]; 

     for(int i =0; i < length;i++){ 
      arr[i]=i; 
     } 
     for(int data : arr){ 
      System.out.println("Data: "+data); 
     } 

    } 
} 

我真的很感激,如果有人可以請解釋我的行爲。

+2

不確定要解釋什麼。你的理解是錯誤的。 – tnw

+1

這不是您在編譯時定義它,而是它在某個時刻定義的。在上面的例子中,當代碼被執行時,它會創建'arr []'變量,然後它會定義大小。然後將數組固定爲該大小,但不必在創建之前對大小進行硬編碼。 –

回答

0

是的,你可以通過int類型的東西到new T[<int>]構造,比如你也可以這樣做:

int userInput = new Scanner(System.in).nextInt(); 
int len = 12 + 14 * 3/userInput; 
byte[] arr = new byte[len]; 
// arr has now the size as specified by len. 
0

你可以根據它像這樣 - 你的程序真的不介意你在該框中寫入(只要它的數組數據結構的合理數量 - 小於Integer.MAX_VALUE且非負數),直到它開始運行爲止。 所以,如果你寫

int[] box = new int[4]; 

你建立之前,數組的長度將是4。事實上,直到代碼運行Java不知道,數組甚至沒有初始化。

在這種情況下,只要程序運行該代碼行時,變量對於數組長度而言是合理的數字,就可以使用變量來表示數組長度。

0

在Java中,您可以創建一個大小爲在運行時確定的數組。

從您的代碼:

int arr[] = new int[length]; 

當在運行時期間達到該線,該程序分配的整數數組,其大小是由arr

等於可變 length並參照它的當前值
相關問題