#java #arrays #arraylist #multidimensional-array
#java #массивы #arraylist #многомерный массив
Вопрос:
У меня есть, ArrayList
который имеет объекты из Coord
s, которые являются x и y:
ArrayList<Coords> positionsArrayList = new ArrayList<>(values);
class Coords {
int x;
int y;
public boolean equals(Object o) {
Coords c = (Coords) o;
return c.x == x amp;amp; c.y == y;
}
public Coords(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int hashCode() {
return new Integer(x "0" y);
}
}
Теперь я хочу извлечь эти x и y в виде 2D массива double[][]
.
Точно так же, как
double[][] vector={{0,0},{1,1},{2,2}}
Я пробовал этот код:
for (Coords value : positionsArrayList) {
positions = new double[][]{{value.x, value.y}};
}
Но он вводит только последнюю запись. Новичок в Java, пожалуйста, помогите
Ответ №1:
Инструкция:
positions = new double[][]{{value.x, value.y}};
каждый раз переназначает ссылку. Наконец, positions
будет «указывать на» (содержать) последний кортеж, вот почему вы видите его как результат.
Ответ №2:
Что вы можете сделать, так это использовать традиционный цикл for для достижения результата:
positions = new double[positionsArrayList.size()][2];
for(int i =0; i < positionsArrayList.size(); i ){
positions[i][0] = positionsArrayList.get(i).getX();
positions[i][1] = positionsArrayList.get(i).getY();
}
Ответ №3:
Вы могли бы присвоить каждой координате значение для каждого индекса, например:
double[][] positions = new double[positionsArrayList.size()][2];
for (int i = 0; i < positionsArrayList.size(); i ) {
positions[i][0] = positionsArrayList.get(i).x;
positions[i][1] = positionsArrayList.get(i).y;
}
Или, если вы знакомы с stream:
double[][] positions= positionsArrayList.stream()
.map(coords -> new double[]{coords.x, coords.y})
.toArray(double[][]::new);