我正在做一个RPG风格的程序,但是我有麻烦让我的宝藏对象数组工作。我想保存我在数组中找到的所有珍宝,以便稍后打印出来。下面是宝藏类的代码:
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] + ", ");对于数组中应该有多少个珍宝,我只会得到"null“。如果我打印出t.collectedTreasures(t)之后的数组,我会看到只有最后一个宝藏在那里,并且该对象之前的索引为null。我做错了什么?
是的我是新手。对我好点。
发布于 2013-01-18 21:10:49
这段代码非常可疑:
GoldTreasure t = new Coin();
hero1.setPoints(t.getCoin());
t.collectedTreasures(t);这意味着你是:
t;collectedTreasures。你应该将宝藏数组分配给英雄,而不是宝藏本身。
还要注意,x不应该是静态变量,因为它将在所有实例之间共享;显然不是您的意图,因为宝库数组是按实例的。
发布于 2013-01-18 21:17:32
问题是你收集的宝藏本身,因为你调用collect函数-属于一个宝藏-来收集它自己。
稍后,当您在哪个对象中调用printTreasures时,它会运行吗?您是否创建了一个新的宝藏实例,并要求它打印它收集的内容?如果是这样的话,结果是根据代码的,没有问题,但逻辑是错误的。
你应该做的是:英雄是一个收集珍宝的人,因此在英雄类中移动珍宝数组、计数器和两个函数- collectedTreasures和printTreasures -的定义。此外,使X不是静态的,因为它的价值将在英雄之间共享。也许,更精致的是,创建一个额外的类来处理宝藏,并使用不同的类来组成你的英雄。
我建议将collectedTreasures(珍宝t)函数重命名为collectTreasure(珍宝t)。
发布于 2013-01-18 21:17:57
我们需要查看您的完整代码才能给出详细的答案,但我怀疑您正在做的是创建大量Treasure子类并在每个子类上调用collectedTreasure。这将使您的全局x计数器每次递增,而每个单独的treasureArray中只有一个条目。
您可以将collectedTreasure方法移动到与您的hero1对象相对应的类中,同时,删除静态(全局) x变量,并将您的Treasure对象数组替换为List实现(例如ArrayList),它们都会跟踪它们自己的大小,这样您就不必这样做了。另外,当你得到超过20个宝物时,你的代码不会崩溃!
https://stackoverflow.com/questions/14399649
复制相似问题