Java IndexOutOfBoundsException в Arraylist - PullRequest
0 голосов
/ 24 июня 2018

Ниже приведен код, который я написал:

    import static java.lang.System.out;
    import java.util.Scanner;
    import java.util.ArrayList;
    class Uni{
        static public void main(String...args){
            Scanner sc = new Scanner(System.in);
            ArrayList<Integer>list = new ArrayList<Integer>();
            for(int a=0,i=0;list.get(i)!=42;i++){    
                  a=sc.nextInt();
                  list.add(i,a);
            }
            for(int i=0;i<list.size();i++){
                out.println(list.get(i));
            }
        }
    }

И вот ошибка, которую я получаю:

Выполнение не удалось.java.lang.IndexOutOfBoundsException: индекс: 0, размер: 0

Stack Trace:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at Uni.main(Uni.java:8)

Не могли бы вы помочь с тем, что делать?

1 Ответ

0 голосов
/ 24 июня 2018

Может быть, вы хотели использовать цикл while?Проще инициализировать список.Кроме того, ваш код проверяет, не равен ли list.get(i) 42, но вы не можете этого сделать, поскольку ваш список с индексом 0 по-прежнему равен нулю.

Решение может быть следующим:

import static java.lang.System.out;
import java.util.Scanner;
import java.util.ArrayList;
class Uni{
    static public void main(String...args){
        Scanner sc = new Scanner(System.in);
        ArrayList<Integer>list = new ArrayList<Integer>();
        int i = 0;
        while(i!=42) {
            list.add(i++,sc.nextInt());
        }
        for(int i=0;i<list.size();i++)
        {
            out.println(list.get(i));
        }
    }
}

РЕДАКТИРОВАТЬ: остановить после того, как ввод 42:

import static java.lang.System.out;
import java.util.Scanner;
import java.util.ArrayList;
class Uni{
    static public void main(String...args){
        Scanner sc = new Scanner(System.in);
        ArrayList<Integer>list = new ArrayList<Integer>();
        int i = 0
        while (true) {
            int in = sc.nextInt();
            if (in==42) break;
            list.add(i++,sc.nextInt())
         }

        for(int i=0;i<list.size();i++)
        {
            out.println(list.get(i));
        }
    }
}
...