我关于 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();
它说:
Variable expected.
有什么建议吗? (这可能 super 简单,但这对我来说是全新的)
感谢您阅读/回复
最佳答案
这种形式的表达...
(char1 == new Character())
...将总是评估为false
(或抛出异常)。 new
运算符永远不会产生 null
结果,也永远不会产生对之前存在的对象的引用,但是这些替代方案涵盖了 char1< 的所有可能值
在任何时候。您更有可能想要这样的东西:
if (char1 == null) {
char1 = new Character();
return char1;
}
但事实上,我永远不会把十个字符放在十个自变量中。我可能会使用 Character
的 List
,或者在最坏的情况下使用数组。
已经过去了,你有一个不同的问题。您返回的 Character
已经是分配给预期插槽的对象。您可以设置它的属性(在其类允许您这样做的范围内),但您不能通过分配给它来用不同的对象替换它。事实上,您根本无法直接对方法结果进行赋值,但即使将其存储在变量中,将不同的对象赋值给该变量也不会产生您想要的效果。
(请注意,顺便说一句,我要区分分配给方法返回值的成员,你可以这样做,和分配给值本身,你不能这样做。)
我认为您最好完全摆脱 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
实例负责处理大量细节,否则您将不得不为其编写自己的代码。
关于java - 初始化由函数 Java for android 检索的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27608536/