Java 数组中丢失的对象
我正在制作一个RPG风格的程序,但我很难让我的宝藏对象数组正常工作。我想保存我在阵列中找到的所有宝藏,以便稍后打印出来。以下是宝藏类的代码:Java 数组中丢失的对象,java,arrays,Java,Arrays,我正在制作一个RPG风格的程序,但我很难让我的宝藏对象数组正常工作。我想保存我在阵列中找到的所有宝藏,以便稍后打印出来。以下是宝藏类的代码: private static int x = 0; Treasure treasureArray[] = new Treasure[20]; public void collectedTreasures(Treasure t){ treasureArray[x] = t; x++; } 在主程序中: GoldTreasure t = new Coin(
private static int x = 0;
Treasure treasureArray[] = new Treasure[20];
public void collectedTreasures(Treasure t){
treasureArray[x] = t;
x++;
}
在主程序中:
GoldTreasure t = new Coin();
hero1.setPoints(t.getCoin());
t.collectedTreasures(t);
宝藏对象的创建是在无限循环中的开关中进行的。
当我打印出数组时,使用
public void printTreasures(){
for (int y=0 ; y<x ; y++){
System.out.print(treasureArray[y] + ", ");
public void printTreasures(){
对于(int y=0;y而言,此代码非常可疑:
GoldTreasure t = new Coin();
hero1.setPoints(t.getCoin());
t.collectedTreasures(t);
这意味着你是:
创建一个新的宝藏t
调用collectedtreas可确保对该实例执行
你应该将宝藏阵列分配给英雄,而不是宝藏本身
还要注意,x
不应该是一个静态变量,因为它将在所有实例中共享;显然不是您的意图,因为宝藏数组是每个实例的。问题是您自己收集宝藏,因为您调用了属于宝藏的collect函数来收集自己
稍后,当您在运行哪个对象中调用printTreasures时?您是否创建了一个新的treasure实例并要求它打印它收集的内容?如果是这样,则结果与代码一致,没有任何问题,但逻辑错误
你应该做的是:英雄是收集宝藏的人,因此在英雄类中移动宝藏数组、计数器和两个函数的定义-collectedTreasures和printTreasures。此外,使X不是静态的,因为它的值将在英雄之间共享。也许,更优雅的是,创建一个额外的类to使用不同的类来处理宝藏并组成英雄
我可以建议将collectedTreasures(Treasure t)函数重命名为collectTreasure(Treasure t)吗.我们需要查看您的完整代码才能给您一个详细的答案,但我怀疑您所做的是创建大量的宝藏子类,并在每个子类上调用collectedTreasure
。这将每次增加您的全局x
计数器,而每个宝藏阵列
只有其中有一个条目
您可以将collectedTreasure
方法移动到与hero1
对象对应的类中,同时去掉静态(全局)x
变量,并用列表
实现替换珍宝
对象数组(例如ArrayList
)当你得到20多个宝贝时,你的代码不会崩溃。你的变量<代码> x>代码>可能不应该是代码>静态< /代码>。
在类宝藏中定义
?您可能有一个单独的宝藏集合与每个宝藏
对象关联。t.collectedTreasures(t)
看起来很可疑。我没有花太多时间查看你的代码,但你真的在添加它自己吗?@SirkoVector
已经过时了,请使用ArrayList
来代替。在这种情况下,可能最好使用set。OP最终将返回到有史以来的第一个比赛条件:)是的。静态只是让你更容易在不应该在的地方引用它。谢谢!!!现在英雄类中的数组就像一个符咒。而且也不需要静态x。