Язык обработки: получение значений внутреннего массива из ArrayList()

#java #arrays #multidimensional-array #arraylist #processing

#java #массивы #многомерный массив #arraylist #обработка

Вопрос:

Я пытаюсь использовать метод ArrayList() при обработке.

У меня есть это:

     ArrayList trackPoints = new ArrayList();

        //inside a loop
        int[] singlePoint = new int[3];

        singlePoint[0] = 5239;
        singlePoint[1] = 42314;
        singlePoint[2] = 1343;
        //inside a loop

    trackPoints.add(singlePoint);
  

Итак, в основном я хочу добавить массив «одноточечный» с тремя значениями в мой ArrayList.

Кажется, это работает нормально, потому что теперь я могу использовать println(trackPoints.get(5)); , и я получаю это:

 [0] = 5239;
[1] = 42314;
[2] = 1343;
  

Однако как я могу получить одно значение этого массива?

println(trackPoints.get(5)[0]); не работает.

Я получаю следующую ошибку: «Тип выражения должен быть типом массива, но он разрешен в Object»

Есть идеи, что я делаю не так? Как я могу получить отдельные значения из этого ArrayList с несколькими массивами в нем?

Спасибо за вашу помощь!

Ответ №1:

Вы ArrayList должны ввести :

 List<int[]> list = new ArrayList<int[]>();
  

Если это не так, то вы используете необработанный список, который может содержать что угодно. get Таким образом, его метод возвращает Object (который является корневым классом всех объектов Java), и вы должны использовать приведение:

 int[] point = (int[]) trackPoints.get(5);
println(point[0]);
  

Вы должны прочитать о дженериках и прочитать документ api ArrayList.

Комментарии:

1. Последнее можно сократить println(((int[]) trackPoints.get(5))[0]); . Он сохраняет строку и временную переменную, но двухстрочную версию немного легче читать.

Ответ №2:

get() Метод в классе ArrayList возвращает объект, если вы не используете его с обобщенными. Итак, в основном, когда вы говорите trackPoints.get(5) , что он возвращает объект.

Это то же самое, что,

 Object obj = list.get(5);
  

Таким образом, вы не можете вызвать obj[0] .

Для этого вам нужно сначала ввести регистр, например:

 ( (int[]) trackPoints.get(5) )[0]