有没有办法在Java中创建数组,而无需先定义或询问其长度?
A.k.a用户输入一些数字作为参数,程序创建一个包含许多参数的数组。
答案 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
指向新阵列。因此,如果要保留旧数组的值,则必须手动将旧数组元素复制到新数组。 然而,这效率不高。
增加和缩小数组大小的有效方法是使用List
或ArrayList
。但要在阵列上单独回答你的问题。是的,您可以在运行时创建它,也可以在运行时将数组引用指向另一个数组。
答案 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是指定数组的大小。 希望我能回答你的问题。
祝你有美好的一天。