#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]