程序不在数组中存储值

时间:2016-04-16 03:09:34

标签: java

试图制作一个由用户输入的整数排序程序,并希望它能够获取尽可能多的整数用户想要,而不是先询问他想要排序多少个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] + "    ");
        }

    }
}

2 个答案:

答案 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在这里也会起作用。)