存储数组中已用单元格的列表,这样我就不会改变那些特定单元格中的值

时间:2018-02-06 00:20:33

标签: java arrays cell

我使用的是2d整数数组,而我遇到的问题是,当我在某些数组中设置值时,我想要一种存储已设置的单元格的方法。

所以我尝试使用列表并添加到那个,我遇到的问题是当我使用这个

usedCells.add(array1[x][y]);

它会添加存储在单元格中的值(整数),而不是参考/单元格本身。

所以我的问题是:

如何从数组中存储已使用单元格的列表,以便我不能更改这些特定单元格中的值。

3 个答案:

答案 0 :(得分:0)

而不是使用列表来存储已使用过的单元格' (这使查找相当笨拙),使用类似的数组存储您的数据。

此示例代码将保护数据不被覆盖:

double ComputeGasVolume (double gasPressure, double gasTemperature, double gasMoles) {
   double gasVolume = ((gasMoles * GAS_CONST) * gasTemperature) / gasPressure;

   return gasVolume;
}

您还可以使用三维数组,其中第三维用于保护:设置为0表示您可以写入单元格,设置为1表示单元格受保护。你刚刚学习时我不想给你看三维数组。

答案 1 :(得分:0)

如何在单元格本身中存储有关已使用单元格的信息? 为此,我们需要创建一个简单的类Cell来表示我们需要的行为。

class Cell {
    private int value;
    private boolean used;

    Cell(int value) {
        this.value = value;
    }

    boolean isUsed() {
        return used;
    }

    void markAsUsed() {
        used == true;
    }

    private int get() {
        return value;
    }

    private int set(int newValue) {
        if (used) throw new IllegalStateException("cell is used");
        this.value = newValue;
    }
}

并测试它:

void test() {
    Cell [][] cells = {
        {new Cell(0), new Cell(1)},
        {new Cell(0), new Cell(1)},
        {new Cell(0), new Cell(1)}
    };
    Cell c = cells[1][1];
    c.isUsed(); //false
    c.set(42);  
    c.markAsUsed();

    Cell used = cells[1][1];
    used.isUsed(); // true
    used.set(0) // exception here because this cell is used;
}

正如您所看到的,代码更易读,更方便使用,因为所有代码都代表一个结构而不是数组。 Cell足够聪明,可以知道它是否被使用,并且在使用它时不会给你改变它的值。

答案 2 :(得分:0)

我建议有一个特殊的细胞呈现类。

class MyCell<T> {
    private T value;
    private boolean isReadOnly;

    // constructor, getters, setters
}

此类扮演值和只读属性的容器的角色+它可能具有智能更新值的逻辑(基于只读属性)。