Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中对同一对象进行多个引用_Java_Constructor_Copy_Clone - Fatal编程技术网

如何在Java中对同一对象进行多个引用

如何在Java中对同一对象进行多个引用,java,constructor,copy,clone,Java,Constructor,Copy,Clone,我正在实现一个纵横字谜后端 纵横字谜由插槽和单元格组成 假设(3,14)处的单元格的值为“a” 我想要填字游戏。将CellValueBy坐标(3,14,“x”)更改为“a”->“x” 假设某个插槽在坐标(3,14)处有一个头单元 槽头可通过(2,交叉)=单元(3,14)识别 所以当我下一步调用slot.getCellValueByNumberAndDirection(2,交叉)时,它已经从“a”变为“x” 另一种方法(对于同一单元格)crossword.getSlot(2,cross.getHe

我正在实现一个纵横字谜后端

纵横字谜由插槽和单元格组成

假设(3,14)处的单元格的值为“a” 我想要填字游戏。将CellValueBy坐标(3,14,“x”)更改为“a”->“x”

假设某个插槽在坐标(3,14)处有一个头单元 槽头可通过(2,交叉)=单元(3,14)识别 所以当我下一步调用slot.getCellValueByNumberAndDirection(2,交叉)时,它已经从“a”变为“x”

另一种方法(对于同一单元格)crossword.getSlot(2,cross.getHead)也从“a”改为“x”


我如何使这三个不同类型的对象(纵横字谜、插槽、单元格)都有一个属性(可能名称相同,让我们称之为“内容”),由所有类共享/引用?

有很多方法来处理这个问题。这里有一个方法:

我不太喜欢吃角子老虎的课程。这对线索之间的交叉毫无帮助

当你看纵横字谜时,你看到了什么?我看到一块空白的正方形板。有些角落里的数字很少。我也看到了我无法书写的黑色方块。我看到一系列“向下”的线索,以及一系列“交叉”的线索

不管我做什么,我都会在那块空白的方格板上写字。所以我会创建一个类似网格的类,叫做Board,它允许我在上面写东西。某些方块中的小数字是特定单词的索引方式。每个单元格的内容可以是空格、字母或-1(如果正方形不可写)

您可以选择实现一个Square(或Cell)类。它将包括一个标志,说明实例的写入能力。它可以包括一个数字,表示线索所适用的细胞。有更优雅的方法可以做到这一点。实现这一点,我们可以讨论更高级的类层次结构

Board类将包含单元实例的NxN结构(可能是一个数组)

另一个类称为“线索”,对应于向下或横向的线索列表。线索包括线索实例列表

最后,我有一个线索类,其中每个实例都包含一个ID(例如“15 down”中的15)和要显示的线索文本


我想一旦你初始化了电路板,你就有了制作一个漂亮的纵横字谜程序所需要的一切。

我已经知道如何做所有这些,我实际上是在每个对象(正方形,电路板)中创建一个引用属性,当引用属性改变时,每个对象都会改变。我想我的答案是“不要这样做”。选择拥有该值的实体,并要求所有其他实体与该实体对话以更改该值。您能给我一个如何执行该操作的示例吗?这是一个接口可以做到的吗?或者我必须使用全局/静态变量吗?我可以帮你解决这个问题。首先,创建Cell或Square类。根据我上面写的,方法至少应该包括“iswriteable()”和“write(char-letter)”。注意
write()
如果分配的值与字母不同,则应失败-这将是一个伪交叉点。一旦你有了这个类,你将需要一个二维数组。数组应该位于Board类内部。板中的方法可以是
写入(int-id、char-direction、String-text)
。一个例子可能是船上的
并让电路板找出“12向下”的位置。所以Board管理文本的位置,Square管理一个字母的实际值。