英文:
How to make (what is effectively) a pointer in Java
问题
我知道Java中没有指针类型,但我有一个对象数组,我需要类似指向数组第一个元素的指针的东西,无论它是什么,或者指向的对象改变了多少次。这是我正在开发的一个宠物小精灵游戏,我在Player类中有以下代码:
public class Player {
public String name;
public Pokemon[] party;
public static Pokemon currentPokemon;
public Player(){
this.party = new Pokemon[6];
currentPokemon = party[0];
}
}
我需要currentPokemon始终“指向”party[0],这就是我认为要将其设置为静态的原因,但当我稍后向数组添加宠物时,party[0]包含了宠物,但currentPokemon却为null。我如何获得这种类似指针的行为?
英文:
I know that there are no pointer types in Java, but I have an array of objects, and I need something to work like a pointer to the first element of the array not matter what it is or how many times the pointee changes. This is for a Pokemon game I am working on, and in the Player class, I have
public class Player {
public String name;
public Pokemon[] party;
public static Pokemon currentPokemon;
public Player(){
this.party = new Pokemon[6];
currentPokemon = party[0];
}
}
I need currentPokemon to always "point" to party[0], which is why I thought to make it static, but when I later add pokemon to the array, party[0] cointains the Pokemon but currentPokemon is null. How do I get this pointer-like behavior?
答案1
得分: 3
static
成员属于 class,并且被所有实例共享。每次创建新实例时,都会覆盖 currentPokemon
的值(在构造函数中)。移除 static
修饰符,问题应该就解决了:
public class Player {
public String name;
public Pokemon[] party;
public Pokemon currentPokemon; // 这里
编辑:
根据 Christian Cook 最后的评论,我现在认为我理解了问题陈述。currentPokemon
在构造函数中使用 party[0]
进行了初始化,而当然此时 party[0]
是 null
,因为 party
刚刚在前一行创建。与 C(++)中的指针不同,currentPokemon
不会在 party
更新时更新 - 它不是指针,只是一个对 party[0]
进行初始化时的值的引用。
获得你所寻求的行为最简单的方法是不将 currentPokemon
存储为成员,而是创建一个检索它的方法:
public Pokemon getCurrentPokemon() {
return party[0];
}
英文:
static
members belong to the class, and are shared by all instances. Every time you create a new instance, you override currentPokemon
's value (in the constructor). Remove the static
modifier and you should be OK:
public class Player {
public String name;
public Pokemon[] party;
public Pokemon currentPokemon; // Here
EDIT:<br/>
With the last comment by Christian Cook I think I now understand the problem statement. currentPokemon
is initialized in the constructor with party[0]
, which is of course null
, because party
was just created on the previous line. Unlike a pointer in c(++), currentPokemon
won't update when party
does - it isn't a pointer, it's just a reference to the value party[0]
had when it was initialized.
The easiest way to get the behavior you're looking for is to not store currentPokemon
as a member, but has a method to retrieve it instead:
public Pokemon getCurrentPokemon() {
return party[0];
}
答案2
得分: -1
你可以这样引用数组
Pokemon[] currentPokemon = party
现在,party 和 currentPokemon 都指向同一个对象数组。操作 currentPokemon 会导致操作 party。
希望这能有些帮助。
英文:
You can point to arrays like this
Pokemon[] currentPokemon=party
Now, party and currentPokemon are pointing to the same array of objects. Manipulating currentPokemon results in manipulating party.
Hope this helps a little.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论