繁体   English   中英

在不知道其大小的情况下输入数组

[英]Enter array without knowing its size

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

也就是用户输入一些数字作为参数,程序会创建一个包含这么多参数的数组。

有没有办法在java中创建一个数组,而不先定义或要求它的长度? 也就是用户输入一些数字作为参数,程序会创建一个包含这么多参数的数组。

目前尚不清楚您所处的确切情况。如果您在执行时知道数组长度但在编译时不知道,那很好:

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

为此,您需要使用 ArrayList。

编辑:

米罗斯拉夫很可能是一个试图完成作业的学生。 通常在这些作业中,您会被要求从标准输入中读取值并对其进行处理。 在这种情况下,将它们存储在一个数组中。 所以,当他有一个值要存储在数组中时,他还不知道有多少值即将到来。 所以,ArrayList 是要走的路。

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

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

是的,我已经阅读了 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 指定数组大小。 希望,我可以回答你的问题。

祝你有美好的一天。

您可以使用String获取输入,然后使用Integer.parseInt()转换/使用它。

使用它,您不必分配过大的数组。

import java.util.Scanner;

public class Main
{
    public static void main(String[] args) {
        
        Scanner s = new Scanner(System.in);
        String val = s.nextLine();
        String[] arr = val.split("\\s+");
        for(int i=0; i<arr.length; i++){
            System.out.print(" " + Integer.parseInt(arr[i]) );
        }
    }
}

暂无
暂无

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

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