Java:如果未知,我如何初始化数组大小?

时间:2013-04-03 00:03:30

标签: java

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

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);

7 个答案:

答案 0 :(得分:22)

你应该使用List这样的东西,而不是数组。作为一般经验法则,当您不知道要在手数中添加多少元素时,请使用List代替。大多数人可能会使用ArrayList来解决这个问题。

如果你真的不能使用List,那么你可能不得不使用一些初始大小的数组(可能是10?)并跟踪你的数组容量与你有多少元素如果你的空间不足,则添加并将元素复制到一个新的更大的数组(这基本上是ArrayList在内部执行的操作)。另请注意,在现实世界中,您将从不这样做 - 您将使用专门为此类案例制作的标准类之一,例如ArrayList。< / p>

答案 1 :(得分:5)

我认为你需要使用基于它的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以获取有关如何使用该信息的更多信息。

答案 2 :(得分:1)

我同意像List这样的数据结构是最好的方法:

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);

答案 3 :(得分:1)

String line=sc.nextLine();
    int counter=1;
    for(int i=0;i<line.length();i++) {
        if(line.charAt(i)==' ') {
            counter++;
        }
    }
    long[] numbers=new long[counter];
    counter=0;
    for(int i=0;i<line.length();i++){
        int j=i;
        while(true) {
            if(j>=line.length() || line.charAt(j)==' ') {
                break;
            }
            j++;
        }
        numbers[counter]=Integer.parseInt(line.substring(i,j));
        i=j;
        counter++;  
    }
    for(int i=0;i<counter;i++) {
        System.out.println(numbers[i]);
    }    

我总是在这种情况下使用此代码。在旁边,您可以识别两个或三个或更多数字。

答案 4 :(得分: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]);
        }
    }
}

答案 5 :(得分: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();
}

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

答案 6 :(得分:0)

**从单行输入数组编号列表。

   String input = sc.nextLine();
    String arr[] = input.split(" ");
    int new_arr[] = new int[arr.length];
    for(int i=0; i<arr.length; i++)
    {
         new_arr[i] = Integer.parseInt(arr[i]);
    }