Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组中丢失的对象_Java_Arrays - Fatal编程技术网

Java 数组中丢失的对象

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(

我正在制作一个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] + ", ");
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)
    看起来很可疑。我没有花太多时间查看你的代码,但你真的在添加它自己吗?@Sirko
    Vector
    已经过时了,请使用
    ArrayList
    来代替。在这种情况下,可能最好使用set。OP最终将返回到有史以来的第一个比赛条件:)是的。静态只是让你更容易在不应该在的地方引用它。谢谢!!!现在英雄类中的数组就像一个符咒。而且也不需要静态x。