我需要使用LinkedList来添加监狱的单元格,单元格编号为1.1,1.2,1.3,1.4等。有两个级别,奇数编号的单元格有1个铺位,而偶数编号的单元格有2个铺位。我怎么能这样做?
我这样做是为了创建一个链表。那是在我的Cells类中,我有2个子类继承自Cells类,称为奇数和偶数单元格。我是否将所有单元格放在单元格类中,或者只将奇数类中的奇数放入偶数类中的单元格中?
LinkedList<Cells> cellId = new LinkedList<Cells>();
public void add()
{}
我不确定在add方法中放什么..
答案 0 :(得分:3)
继上面的评论之后,这里有一个如何使用数组实现它的示例,假设您已在主类中定义了常量LEVELS和CELLS_PER_LEVEL(即使用“private static final”):
Cell[][] cells = new Cell[LEVELS+1][];
for(int level = 1; level <= LEVELS; level++) {
cells[level] = new Cell[CELLS_PER_LEVEL+1];
}
当然,这会使细胞本身全部为空。您需要将它们初始化为OddCell或EvenCell。例如,要创建单元格1.5:
cells[1][5] = new OddCell();
当然,数组实际上是从零开始编号,但由于单元格从一开始编号,因此忽略这些元素是最简单的。 cells [0]保留为null,因为没有“level 0”。同样,单元格[1] [0]可以保留为空,因为没有单元格1.0。
如果细胞数量永远不变,则数组是一个不错的选择。另一方面,如果必须动态添加单元格甚至级别,则选择ArrayList。不过,语法并不那么友好。例如,如果您有一个ArrayList&lt; ArrayList&lt; Cell&gt;&gt;类型的可变单元格,那么要分配给单元格1.5,您必须写:
cells.get(1).set(5, new OddCell());
无论如何,你是否使用数组,arraylists或其他东西最终是你的决定,并取决于整个程序。
答案 1 :(得分:1)
将Odd
和Even
类作为Cell
的子类听起来对我来说非常错误。相反,Cell类应该具有'Number'属性,以及isOdd()
和/或isEven()
之类的方法。
无论如何,我会说所有单元格应该在一个链表中。
答案 2 :(得分:1)
你可以像你想要的那样做,只需将单元格添加到列表中(不扩展列表)。类似的东西:
public class Cell {
// all the internal logic
}
public class EvenCell extends Cell {}
public class OddCell extends Cell {}
LinkedList<Cell> cells = new LinkedList<Cell>();
cells.add(new OddCell());
cells.add(new EvenCell());
// ...
然后使用类似instanceof
的内容来确定单元格是偶数还是奇数。
Cell c = cells.get(1);
if (c instanceof EvenCell) {
// ...
} else {
// ...
}