Невозможно добавить int в ArrayList из ArrayLists - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь создать алгоритм сортировки по Radix, и у меня есть Array List of Array Lists.

Radix Sort добавляет элементы в список «внешнего» массива в зависимости от значения числа «один», «десятки», «сотни» и т. Д. Каждый «внутренний» список массивов соответствует разряду цифр 0, 1, 2, 3 ... 9.

Значение переменной "base" равно 10, поскольку имеется 10 цифр (0-9)

Вот декларация:

    ArrayList<ArrayList<Integer>> digits = new ArrayList<ArrayList<Integer>>(base); //arraylist that can hold 10 elements to sort elements according to digits 0-9

    for(int i=0; i <digits.size(); i++){

        digits.add(i, new ArrayList<Integer>()); //make an arraylist for each element inside the digits array list, this will hold the numbers that are being sorted
    }

Однако позже, когда я пытаюсь добавить целые числа в правильный список «внутреннего» массива, я не могу сделать это, поскольку пытаюсь добавить целое число в место типа ArrayList. Я также получаю индекс из связанной ошибки.

while(!(lastDigit)) //if last digit has not been reached
    {
        lastDigit = true;

        for(int k=0; k < array.length; k++) //array contains the numbers we are sorting
        {
            number = k / digitPlace; //digitPlace starts off as 1 to first sort by one's place and is then later multiplied by 10 
            int index = number % base; //get digit from correct place

             digits.add(index, k);//line with the ERROR; add the element in the correct place (according to it's digit)

            if(number > 0 && lastDigit) 
            {
                lastDigit = false;
            }

        }

Способ решения этой проблемы состоит в том, что я приводил целое число к типу ArrayList, но это означало бы, что я бы добавил Array List во внутренний список массивов, а это не то, что мне нужно. Я хочу добавить int в правильный "внутренний" ArrayList.

Ответы [ 2 ]

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

digits.get(index).add(n);
где n - номер из входного массива, который должен быть добавлен.

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

JavaDoc размера ():

Возвращает количество элементов в этом списке. (...)

ArrayList<ArrayList<Integer>> digits = new ArrayList<ArrayList<Integer>>(base);
for(int i=0; i < digits.size(); i++){
    digits.add(i, new ArrayList<Integer>());
}

Вы ссылаетесь на размер Списка в цикле for вместо емкость !

Используйте base переменные, используемые для создания списка, вместо digits.size ()

...