首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组中丢失的对象

数组中丢失的对象
EN

Stack Overflow用户
提问于 2013-01-18 21:07:19
回答 3查看 92关注 0票数 3

我正在做一个RPG风格的程序,但是我有麻烦让我的宝藏对象数组工作。我想保存我在数组中找到的所有珍宝,以便稍后打印出来。下面是宝藏类的代码:

代码语言:javascript
复制
private static int x = 0;
Treasure treasureArray[] = new Treasure[20];

public void collectedTreasures(Treasure t){
treasureArray[x] = t;
x++;
}

在主程序中:

代码语言:javascript
复制
GoldTreasure t = new Coin();
hero1.setPoints(t.getCoin());
t.collectedTreasures(t);

宝藏对象的创建是在无限循环中的一个开关中进行的。当我打印出数组时,使用方法

代码语言:javascript
复制
public void printTreasures(){
        for (int y=0 ; y<x ; y++){
            System.out.print(treasureArray[y] + ", ");

对于数组中应该有多少个珍宝,我只会得到"null“。如果我打印出t.collectedTreasures(t)之后的数组,我会看到只有最后一个宝藏在那里,并且该对象之前的索引为null。我做错了什么?

是的我是新手。对我好点。

EN

回答 3

Stack Overflow用户

发布于 2013-01-18 21:10:49

这段代码非常可疑:

代码语言:javascript
复制
GoldTreasure t = new Coin();
hero1.setPoints(t.getCoin());
t.collectedTreasures(t);

这意味着你是:

  1. 在该实例上创建一个新的宝藏t;
  2. calling collectedTreasures

你应该将宝藏数组分配给英雄,而不是宝藏本身。

还要注意,x不应该是静态变量,因为它将在所有实例之间共享;显然不是您的意图,因为宝库数组是按实例的。

票数 6
EN

Stack Overflow用户

发布于 2013-01-18 21:17:32

问题是你收集的宝藏本身,因为你调用collect函数-属于一个宝藏-来收集它自己。

稍后,当您在哪个对象中调用printTreasures时,它会运行吗?您是否创建了一个新的宝藏实例,并要求它打印它收集的内容?如果是这样的话,结果是根据代码的,没有问题,但逻辑是错误的。

你应该做的是:英雄是一个收集珍宝的人,因此在英雄类中移动珍宝数组、计数器和两个函数- collectedTreasures和printTreasures -的定义。此外,使X不是静态的,因为它的价值将在英雄之间共享。也许,更精致的是,创建一个额外的类来处理宝藏,并使用不同的类来组成你的英雄。

我建议将collectedTreasures(珍宝t)函数重命名为collectTreasure(珍宝t)。

票数 0
EN

Stack Overflow用户

发布于 2013-01-18 21:17:57

我们需要查看您的完整代码才能给出详细的答案,但我怀疑您正在做的是创建大量Treasure子类并在每个子类上调用collectedTreasure。这将使您的全局x计数器每次递增,而每个单独的treasureArray中只有一个条目。

您可以将collectedTreasure方法移动到与您的hero1对象相对应的类中,同时,删除静态(全局) x变量,并将您的Treasure对象数组替换为List实现(例如ArrayList),它们都会跟踪它们自己的大小,这样您就不必这样做了。另外,当你得到超过20个宝物时,你的代码不会崩溃!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14399649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档