有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何从用户处接受整数并将其存储在java的int数组中

我试图从用户那个里一个接一个地接受原始整数列表,并将其存储到原始数组中供以后使用。 这是我的密码:

     Scanner scanner=new Scanner(System.in);
    int n= scanner.nextInt();
    ArrayList<Integer> arr=new ArrayList<>();
    int[] a = new int[arr.size()];
    Iterator<Integer> iterator = arr.iterator();
    if (n < 15){
        for (int i=0;i<n;i++){
            System.out.println("enter "+i+" th number");
             arr.add(scanner.nextInt());
             a[i] = iterator.next().intValue();

        }} 
    else {
            System.out.println("Please enter number less than 15");
            //break;
        }e here

出现运行时错误,代码如下:

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at App.main(App.java:26)

这是ArrayList的failfast问题(在这种情况下,在ArrayList上迭代时不允许修改列表)。 我怎样才能使上述代码失效保护?。。。。我对问题的理解是否正确? 提前非常感谢


共 (3) 个答案

  1. # 1 楼答案

    您不能向列表中添加内容,然后从该列表上预先存在的迭代器中读取内容

    如果需要刚才添加的元素,请使用

    arr[i] = list.get(list.size() - 1);
    

    但是,arr的长度为零,因此arr[i]将产生一个ArrayIndexOutOfBoundsException

  2. # 2 楼答案

    您面临这个问题是因为您通过iterator读取了ArrayList,同时使用arr.add(scanner.nextInt());修改了它。您应该摆脱iterator,使用arr.get(index)访问ArrayList的给定元素

  3. # 3 楼答案

    数组的大小应为n个元素,并且不需要ListIterator来读取Scanner。你所需要的只是

    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int[] a = new int[n];
    for (int i = 0; i < n; i++) {
        System.out.println("enter " + i + " th number");
        a[i] = scanner.nextInt();
    }
    System.out.println(Arrays.toString(a));