繁体   English   中英

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

[英]Java: how do I initialize an array size if it's unknown?

我要求用户输入 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);

您应该将List用于此类,而不是数组。 作为一般经验法则,当您事先不知道将向数组添加多少元素时,请改用List 大多数人可能会通过使用ArrayList来解决这个问题。

如果您真的不能使用List ,那么您可能必须使用某个初始大小(可能是 10?)的数组并跟踪您的数组容量与您添加的元素数量,并将元素复制到如果空间不足,则创建一个更大的新数组(这本质上是ArrayList在内部所做的)。 另请注意,在现实世界中,您永远不会这样做 - 您将使用专为此类情况制作的标准类之一,例如ArrayList

我认为您需要使用 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) );

您可以阅读本文以获取有关如何使用它的更多信息。

我同意像 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);

如果你想坚持一个数组,那么你可以使用这种方式。 但它与 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]);
        }
    }
}
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]);
    }    

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

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

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

**从单行输入数组的数字列表。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM