2016-01-06 72 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并参照它的当前值
相关问题