我使用的是2d整数数组,而我遇到的问题是,当我在某些数组中设置值时,我想要一种存储已设置的单元格的方法。
所以我尝试使用列表并添加到那个,我遇到的问题是当我使用这个
时usedCells.add(array1[x][y]);
它会添加存储在单元格中的值(整数),而不是参考/单元格本身。
所以我的问题是:
如何从数组中存储已使用单元格的列表,以便我不能更改这些特定单元格中的值。
答案 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
}
此类扮演值和只读属性的容器的角色+它可能具有智能更新值的逻辑(基于只读属性)。