关于stackoverflow的第一个问题:
好的,我正在为Android编写一个java游戏,我在初始化从函数/方法中检索的某些类时遇到了麻烦。这是我的代码:
static int unUsedCharacters = 10;
static Character char1;
static Character char2;
static Character char3;
static Character char4;
static Character char5;
static Character char6;
static Character char7;
static Character char8;
static Character char9;
static Character char10;
Character getFreeCharacter() {
if (char1 == new Character()) {
return char1;
} else if (char2 == new Character()) {
return char2;
// and so on... until 10
} else {
return char10;
}
}
public void createCharacter(String x) {
if (unUsedCharacters > 0) {
unUsedCharacters -= 1;
getFreeCharacter() = new Warrior();
//the warrior class extends the character class
} else {
/* no more characters */
}
}
所以问题出在我尝试的地方:
getFreeCharacter() = new Warrior();
它说:
预期的变量。
有什么建议吗? (这很容易,但这对我来说都是新的)
感谢您阅读/回复
答案 0 :(得分:1)
此表格的表达......
(char1 == new Character())
...将总是评估为false
(或抛出异常)。 new
运算符永远不会生成null
结果,并且它永远不会生成对之前存在的对象的引用,但这些备选方案随时会覆盖char1
的所有可能值。你更希望得到这样的东西:
if (char1 == null) {
char1 = new Character();
return char1;
}
事实上,我永远不会在十个自变量中保留十个字符。我可能会使用List
Character
,或者最糟糕的是数组。
过了那个,你有一个不同的问题。您返回的Character
已经是分配给预期插槽的对象。您可以设置其属性(在其类允许的范围内),但您不能通过分配给它来替换它。实际上,您根本无法直接分配给方法结果,但即使您将其存储在变量中,为该变量分配不同的对象也不会产生您想要的效果。
(顺便说一句,请注意,我区分了方法返回值的成员,你可以做,并分配给你自己不能做的值。)< / p>
我认为你最好完全摆脱getFreeCharacter()
。如果你更好地构建你的课程,那么你就不会需要它。而不是如此声明char1
... char10
:
// Yuck, don't do this
Character char1;
Character char2;
// ...
Character char1;
...按照我之前的建议做,并使用List
:
import java.util.ArrayList;
import java.util.List;
public MyGame {
List<Character> characters = new ArrayList<>();
// ...
}
然后,您的createCharacter()
方法可以采用以下格式:
public void createCharacter(String x) {
if (characters.size() < 10) {
characters.add(new Warrior());
} else {
/* no more characters */
}
}
在其他地方,您可以通过get()
方法检索字符列表的元素,例如characters.get(0)
。 List
实例会处理大量您必须编写自己代码的详细信息。