18

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

7 回答 7

29

你应该使用 aList这样的东西,而不是数组。作为一般的经验法则,当您事先不知道要向数组添加多少元素时,请改用 a List。大多数人可能会通过使用ArrayList.

如果你真的不能使用 a List,那么你可能不得不使用一些初始大小的数组(可能是 10?)并跟踪你的数组容量与你添加的元素数量,并将元素复制到 a如果你的空间用完了,新的更大的阵列(这基本上是ArrayList内部做的)。另请注意,在现实世界中,您永远不会这样做 - 您将使用专门为此类情况制作的标准类之一,例如ArrayList.

于 2013-04-03T00:03:57.320 回答
8

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

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

于 2013-04-03T00:11:01.417 回答
2

我同意像 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);
于 2013-04-03T00:10:54.907 回答
1

如果您想坚持使用数组,那么您可以使用这种方式。但它不如 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]);
        }
    }
}
于 2013-04-03T00:14:15.183 回答
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]);
    }    

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

于 2019-12-12T16:53:20.923 回答
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();
}

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

于 2016-11-07T19:23:53.853 回答
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]);
    }
于 2020-05-14T12:36:10.783 回答