输入数组而不知道其大小

时间:2015-02-07 12:11:49

标签: java arrays

有没有办法在Java中创建数组,而无需先定义或询问其长度?

A.k.a用户输入一些数字作为参数,程序创建一个包含许多参数的数组。

5 个答案:

答案 0 :(得分: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 :(得分:1)

您需要使用ArrayList。

编辑:

Miroslav很可能是一名试图完成作业的学生。通常在这些分配中,您需要从标准输入读取值并对它们执行某些操作。在这种情况下,将它们存储在一个数组中。因此,当他有值存储在数组中时,他还不知道有多少值会出现。所以,ArrayList是要走的路。

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

答案 3 :(得分:0)

当您只需要添加元素时,ArrayList可能是这种情况下的最佳结构。如果要添加/删除Collection中间的元素,请使用LinkedList。

答案 4 :(得分:0)

是的,我已经阅读了arr元素和其后的相应空格。

当遇到换行符(\ n)时,停止进一步读取输入内容。

int main()
{
char temp;
int arr[100];
int j = 0;

while (1)
{
    scanf("%d%c", &arr[j++], &temp);
    if (temp == '\n')
        break;
}
printf("%d", j);
}

所以。这里j是指定数组的大小。 希望我能回答你的问题。

祝你有美好的一天。