[英]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
指向一个新数组。 因此,如果要保留旧数组的值,则必须手动将旧数组元素复制到新数组中。 然而,这效率不高。
增大和缩小数组大小的一种有效方法是使用List
或ArrayList
。 但是要单独在阵列上回答您的问题。 是的,您可以在运行时创建它,也可以在运行时将数组引用指向另一个数组。
当您只需要添加元素时,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.