在类中创建和更改类会影响原始类

当我在我的类中创建一个新的类实例,比如说实例i,并且在类内更改这个实例时,所有的实例都会发生变化;但我只希望实例i发生变化。

这个类被称为Square。

这种效果在Square的一个测试函数中得到了展示。

void testFunction() {    Square tempSqr = new Square(x + 1, myTiles, blankIndex);    this.toPrint();    // tempSqr.toPrint();    tempSqr.switchTile(1, 2);// switch is editing parent nodes    // tempSqr.toPrint();    this.toPrint();}

这会产生以下输出

1 2 34 5 67 8 0

—-这不是输出的一部分,只是为了在stackoverflow上进行格式化

1 2 34 5 67 0 8

请注意,在tempSqr.switchTile(); this.Square();之后发生了变化。这不是我想要的结果,我只希望tempSqr发生变化。顺便说一下,tempSqr确实发生了变化。

这是switchTile()方法:

public void switchTile(int myX, int myY) {    Iterator<Tile> e = myTiles.iterator();    int counter = 0;    while (e.hasNext()) {        Tile t = e.next();        if (myX == t.getX() && myY == t.getY()) {            Tile blank = myTiles.get(blankIndex);            int tx = t.getX();            int ty = t.getY();            // /////            int bx = blank.getX();            int by = blank.getY();            // /////////            t.setX(bx);            t.setY(by);            blank.setX(tx);            blank.setY(ty);            // /////////////            myTiles.set(counter, t);            myTiles.set(blankIndex, blank);        }        counter++;    }}

其余的代码可以在https://github.com/danielGood/AISearchDemo上找到,如果你有兴趣的话。任何帮助都将不胜感激,我已经在这个错误上花费了不少时间。提前感谢。


回答:

你的问题出在myTiles上。

在第一行,你创建了一个新的Square,但传递的是同一组tiles。因此,两个square都引用了同一组tiles。

你需要对myTiles进行深拷贝

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注