试图制作一个由用户输入的整数排序程序,并希望它能够获取尽可能多的整数用户想要,而不是先询问他想要排序多少个int,但是在输入它时它只是崩溃, 基本上问题是它没有在数组中存储值
import java.util.Scanner;
class apple {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int j = 0;
int[] arr;
arr = new int[j];
while (true) {
arr[j] = scan.nextInt();
if (arr[j]==(int)'\n'){break;}
j++;
arr = new int[j];
}
for(j = 0 ;j < arr.length ;j++){
System.out.print(arr[j] + " ");
}
}
}
答案 0 :(得分:2)
首先,将Scanner.hasNextInt()
与Scanner.nextInt()
结合使用。接下来,您将创建一个大小为0
的数组;它不能存储任何值,除非您先复制它 1 (因为Java数组是固定长度的)。您可以使用Arrays.copyOf(int[], int)
来执行此操作。并且,您可以在填充后使用Arrays.toString(int[])
显示阵列。像,
Scanner scan = new Scanner(System.in);
int j = 0;
int[] arr = new int[j];
while (scan.hasNextInt()) {
arr = Arrays.copyOf(arr, ++j);
arr[j - 1] = scan.nextInt();
}
System.out.println(Arrays.toString(arr));
Java Collections(如ArrayList
2 )更灵活,允许可变数量的元素。遗憾的是,他们不能直接使用原始类型 3 ,但可以用来存储相应的wrapper classes。像,
List<Integer> al = new ArrayList<>();
while (scan.hasNextInt()) {
al.add(scan.nextInt()); // <-- int will be autoboxed to Integer
}
// int j = al.size(); // <-- like array.length, if you want to know how
// many numbers were read.
System.out.println(al); // ArrayList, unlike arrays, overrides toString
1 哪个有成本。
2 由数组支持的集合。
3 尽管原始类型可以是autoboxed。
答案 1 :(得分:1)
@Elliot Frisch解释了如何使用每次通过重新分配和复制数组来添加元素时“增长”的数组来执行此操作。
更简单的想法是用{/ 1>替换int[] arr;
List<Integer> list = new ArrayList<>();
然后您可以使用list.add(scan.nextInt());
将整数添加到列表中。 ArrayList
负责“增长”幕后存储。 (LinkedList
在这里也会起作用。)