2013-04-03 46 views
11

我要求用户输入1到100之间的数字并将它们分配到一个数组中。数组大小未初始化,因为它取决于用户输入数字的次数。 我应该如何分配数组长度? 如果用户输入5 6 7 8 9(5号),然后Java:如何初始化数组大小,如果它是未知的?

int[] list; 

变得

int[] list = new int[5]; 

我试图使用一个循环,但它不会停止。

int[] integers; 
int j = 0; 
do { 
     integers = new int[j + 1]; 
     integers[j] = in.nextInt(); 
     j++;  
} while((integers[j-1] >= 1) ||(integers[j-1]) <= 100); 

回答

17

您应该使用List这样的事情,而不是一个数组。根据一般经验,如果您不知道将要添加到阵列中的元素数量,请使用List。大多数人可能会通过使用ArrayList来解决这个问题。

如果你真的不能使用List,那么你可能不得不使用一个初始大小的数组(可能是10?),并跟踪你的数组容量与你添加的元素的数量,以及如果你用完了房间(这实质上是ArrayList内部所做的),将这些元素复制到一个新的更大的阵列中。还要注意的是,在现实世界中,你会从来没有这样做 - 你会使用专门为这种情况制定的标准类之一,如ArrayList

+0

我们还没有学会如何对我们arraylist .. –

+1

永远不会太迟开始:-) – arshajii

+1

如果你不能使用arrayList,我需要做什么? – delive

1

我同意,像一个列表的数据结构是最好的一段路要走:

List<Integer> values = new ArrayList<Integer>(); 
Scanner in = new Scanner(System.in); 
int value; 
int numValues = 0; 
do { 
    value = in.nextInt(); 
    values.add(value); 
} while (value >= 1) && (value <= 100); 

或者你可以分配一个最大尺寸和负荷值的数组进去:

int maxValues = 100; 
int [] values = new int[maxValues]; 
Scanner in = new Scanner(System.in); 
int value; 
int numValues = 0; 
do { 
    value = in.nextInt(); 
    values[numValues++] = value; 
} while (value >= 1) && (value <= 100) && (numValues < maxValues); 
2

我认为你需要使用List或基于它的类。

例如,

ArrayList<Integer> integers = new ArrayList<Integer>(); 
int j; 

do{ 
    integers.add(int.nextInt()); 
    j++; 
}while((integers.get(j-1) >= 1) || (integers.get(j-1) <= 100)); 

你可以用于获取有关如何使用的详细信息读取this article

0

如果你想坚持一个数组,那么你可以使用这种方式。但与List相比并不好,不推荐。但它会解决你的问题。

import java.util.Scanner; 

public class ArrayModify { 

    public static void main(String[] args) { 
     int[] list; 
     String st; 
     String[] stNew; 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Enter Numbers: "); // If user enters 5 6 7 8 9 
     st = scan.nextLine(); 
     stNew = st.split("\\s+"); 
     list = new int[stNew.length]; // Sets array size to 5 

     for (int i = 0; i < stNew.length; i++){ 
      list[i] = Integer.parseInt(stNew[i]); 
      System.out.println("You Enterred: " + list[i]); 
     } 
    } 
} 
0
int i,largest = 0; 
Scanner scan = new Scanner(System.in); 
System.out.println("Enter the number of numbers in the list"); 
i = scan.nextInt(); 
int arr[] = new int[i]; 
System.out.println("Enter the list of numbers:"); 
for(int j=0;j<i;j++){ 
    arr[j] = scan.nextInt(); 
} 

上面的代码工作得很好。我已经输入了列表中的元素数量并相应地初始化了数组。

+0

请详细说明此代码如何回答问题。 – JAL

+0

'最大'从不使用。另外,为什么要求元素的数量,然后让他们提供一个元素列表,然后用'nextInt'解析这个列表,而不是提供一个元素列表,然后抓住整行(并确定行的长度)与'nextLine'? – Ironcache

相关问题