将二维数组元素存储在 arrayList 中
Storing a 2d array elements in an arrayList
我有一个二维整数网格。
grid[][];
假设我从二维数组中随机得到一个元素。我的目标是 return 它相邻的网格元素。
为此,我正在创建一个 ArrayList
ArrayList<int[][]> adjacentSidesList = new ArrayList<int[][]>();
我将不得不处理很多情况,并且在每种情况下,相邻边的数量都会不同。所以我选择的数据结构是 ArrayList
但是当我向列表中添加一个元素时
adjacentSidesList.add(grid[row][column+1]);
我知道这是错误的,因为我将网格元素的值添加到 ArrayList 而不是元素本身。有谁知道如何将 arrayElements 存储在 arrayList 中而不是存储在其中的值??
也欢迎任何替代方法,并说明该方法更好的原因
提前致谢
您可以创建一个新的 class 来保存二维数组元素的行和列索引,例如:
class Index {
private int row;
private int column;
//getter and setters
}
现在当你想在列表中存储数据时,你存储索引对象,当你必须访问元素时,你可以像这样访问它:
Index index = adjacentSidesList.get(0);
int element = grid[index.getRow()][index.getColumn()];
您的 grid
对象是一个二维整数数组。 grid[row][column+1]
是一个整数,位于网格中的相应索引中。
adjacentSidesList.add(grid[row][column+1]);
将不起作用,因为您想将一个 int 添加到 ArrayList
个二维 int
数组的列表中。我相信您想存储数字并且想知道这些数字是什么。我想知道邻居的定义。我在这里假设邻居是位于当前元素上、下、左或右的元素,或者更科学地说,元素位于 [=17= 中与当前元素恰好距离为 1 的元素。 ].
第一个问题是一个点可能在您 space 的边缘,这意味着他们没有邻居。下一个问题是邻居的一般公式。我相信你的号码应该知道他们的位置,因此我们应该定义以下 class:
public class GridHandler {
private static GridHandler[][] grid;
private int i;
private int j;
private int value;
public static void init(int[][] input) {
int rowNumber = input.length;
int columnNumber = input[0].length;
grid = new GridHandler[rowNumber][columnNumber];
for (int r = 0; r < rowNumber; r++) {
for (c = 0; c < columnNumber; c++) {
grid[r][c] = new GridHandler(r, c, input[r][c]);
}
}
}
public static GridHandler[][] getGrid() {
return grid;
}
public GridHandler(int i, int j, int value) {
this.i = i;
this.j = j;
this.value = value;
grid[i][j] = this;
}
public int getValue() {
return value;
}
public void setValue(value) {
this.value = value;
}
public int getLeftValue() throws ArrayIndexOutOfBoundsException {
if (j == 0) {
throw new ArrayIndexOutOfBoundsException("Left edge");
}
return grid[i][j - 1].getValue();
}
public int getUpValue() throws ArrayIndexOutOfBoundsException {
if (i == 0) {
throw new ArrayIndexOutOfBoundsException("Up edge");
}
return grid[i - 1][j].getValue();
}
public int getRightValue() throws ArrayIndexOutOfBoundsException {
if (j == grid[0].length - 1) {
throw new ArrayIndexOutOfBoundsException("Right edge");
}
return grid[i][j + 1].getValue();
}
public int getDownValue() throws ArrayIndexOutOfBoundsException {
if (i == grid.length - 1) {
throw new ArrayIndexOutOfBoundsException("Down edge");
}
return grid[i + 1][j].getValue();
}
}
现在,如果您使用 class,每个元素都会知道它们的邻居。你可以像这样初始化整个东西:
GridHandler.init(grid);
希望对您有所帮助。
我有一个二维整数网格。
grid[][];
假设我从二维数组中随机得到一个元素。我的目标是 return 它相邻的网格元素。 为此,我正在创建一个 ArrayList
ArrayList<int[][]> adjacentSidesList = new ArrayList<int[][]>();
我将不得不处理很多情况,并且在每种情况下,相邻边的数量都会不同。所以我选择的数据结构是 ArrayList
但是当我向列表中添加一个元素时
adjacentSidesList.add(grid[row][column+1]);
我知道这是错误的,因为我将网格元素的值添加到 ArrayList 而不是元素本身。有谁知道如何将 arrayElements 存储在 arrayList 中而不是存储在其中的值?? 也欢迎任何替代方法,并说明该方法更好的原因
提前致谢
您可以创建一个新的 class 来保存二维数组元素的行和列索引,例如:
class Index {
private int row;
private int column;
//getter and setters
}
现在当你想在列表中存储数据时,你存储索引对象,当你必须访问元素时,你可以像这样访问它:
Index index = adjacentSidesList.get(0);
int element = grid[index.getRow()][index.getColumn()];
您的 grid
对象是一个二维整数数组。 grid[row][column+1]
是一个整数,位于网格中的相应索引中。
adjacentSidesList.add(grid[row][column+1]);
将不起作用,因为您想将一个 int 添加到 ArrayList
个二维 int
数组的列表中。我相信您想存储数字并且想知道这些数字是什么。我想知道邻居的定义。我在这里假设邻居是位于当前元素上、下、左或右的元素,或者更科学地说,元素位于 [=17= 中与当前元素恰好距离为 1 的元素。 ].
第一个问题是一个点可能在您 space 的边缘,这意味着他们没有邻居。下一个问题是邻居的一般公式。我相信你的号码应该知道他们的位置,因此我们应该定义以下 class:
public class GridHandler {
private static GridHandler[][] grid;
private int i;
private int j;
private int value;
public static void init(int[][] input) {
int rowNumber = input.length;
int columnNumber = input[0].length;
grid = new GridHandler[rowNumber][columnNumber];
for (int r = 0; r < rowNumber; r++) {
for (c = 0; c < columnNumber; c++) {
grid[r][c] = new GridHandler(r, c, input[r][c]);
}
}
}
public static GridHandler[][] getGrid() {
return grid;
}
public GridHandler(int i, int j, int value) {
this.i = i;
this.j = j;
this.value = value;
grid[i][j] = this;
}
public int getValue() {
return value;
}
public void setValue(value) {
this.value = value;
}
public int getLeftValue() throws ArrayIndexOutOfBoundsException {
if (j == 0) {
throw new ArrayIndexOutOfBoundsException("Left edge");
}
return grid[i][j - 1].getValue();
}
public int getUpValue() throws ArrayIndexOutOfBoundsException {
if (i == 0) {
throw new ArrayIndexOutOfBoundsException("Up edge");
}
return grid[i - 1][j].getValue();
}
public int getRightValue() throws ArrayIndexOutOfBoundsException {
if (j == grid[0].length - 1) {
throw new ArrayIndexOutOfBoundsException("Right edge");
}
return grid[i][j + 1].getValue();
}
public int getDownValue() throws ArrayIndexOutOfBoundsException {
if (i == grid.length - 1) {
throw new ArrayIndexOutOfBoundsException("Down edge");
}
return grid[i + 1][j].getValue();
}
}
现在,如果您使用 class,每个元素都会知道它们的邻居。你可以像这样初始化整个东西:
GridHandler.init(grid);
希望对您有所帮助。