需要帮助Java Array<> libgdx

时间:2015-07-27 19:28:29

标签: java libgdx

当我更改Array<>项目的值时将其分配给临时变量后,主变量值也会发生变化。

Array<Cards> cards = new Array<Cards>();

//add items to cards

Iterator<Cards> iterator = cards.iterator();
while(iterator.hasNext()){
      Cards c = iterator.next();
      Cards Temp = c;
      //when I change values of temp...the value of c also changes
      //overall changing the value of cards
}

有什么方法可以改变Temp的价值而不是c或卡?

我目前正在使用libgdx为Android制作游戏。

2 个答案:

答案 0 :(得分:5)

您需要复制c引用的对象。您当前正在做的只是创建对同一对象的另一个引用。根据{{​​1}}实施和您的需求,您可以Card或明确地创建新的clone

答案 1 :(得分:1)

通过调用.clone()方法,您可以获得Object的副本,而不是对它的引用。

正如@CharlesDurham所说:

  

.clone()将产生一个浅层副本,它是一个新的Card实例,但如果c有任何对象引用,新卡将具有与c相同的引用,除非你实现了Cloneable接口,那么你可以实施深度克隆。

Array<Cards> cards = new Array<Cards>();

//add items to cards

Iterator<Cards> iterator = cards.iterator();
while(iterator.hasNext()){
      Cards c = iterator.next();
      Cards Temp = c.clone();
      //when i change values of temp...the value of c also changes
      //overall changing the value of cards
}

或者你也可以这样new Cards(c)

Array<Cards> cards = new Array<Cards>();

//add items to cards

Iterator<Cards> iterator = cards.iterator();
while(iterator.hasNext()){
      Cards c = iterator.next();
      Cards Temp = new Cards(c);
      //when i change values of temp...the value of c also changes
      //overall changing the value of cards
}