繁体   English   中英

在arrayList中存储二维数组元素

[英]Storing a 2d array elements in an arrayList

我有一个二维的整数网格。

grid[][];

假设我从2d数组中随机得到一个元素。 我的目的是返回其相邻的网格元素。 为此,我创建一个ArrayList

ArrayList<int[][]> adjacentSidesList = new ArrayList<int[][]>();

在很多情况下,我将不得不去做,而在每种情况下,neighborSide的数量将有所不同。 所以我选择的数据结构是ArrayList

但是当我将元素添加到列表中时

adjacentSidesList.add(grid[row][column+1]); 

我知道这是错误的,因为我是将grid元素的值添加到ArrayList而不是元素本身。 有谁知道如何将arrayElements存储在arrayList中而不是存储在它们中的值吗? 也欢迎使用任何其他替代方法,以说明该方法更好的原因

提前致谢

您可以创建一个新类,该类将保存2D数组元素的行和列索引,例如:

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 我相信您想存储数字,并且想知道这些数字是什么。 我想知道邻居的定义。 在这里,我将假设邻居是位于当前元素上,下,左或右的元素,或者,更科学地说,这些元素与Taxicab-geometry中的当前元素之间的精确距离为1。

第一个问题是一点可能在您的空间边缘,这意味着他们没有邻居。 下一个问题是邻居的一般公式。 我相信您的电话号码应该知道其位置,因此我们应该定义以下类别:

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();
    }

}

现在,如果您使用该类,则每个元素都会知道它们的邻居。 您可以像这样初始化整个事情:

GridHandler.init(grid);

我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM