2015-02-07 43 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。但要在阵列上单独回答你的问题。是的,您可以在运行时创建它,也可以在运行时将您的数组引用指向另一个数组。

相关问题