创建类存储对象

时间:2018-03-02 12:41:27

标签: java arrays class store

我有一个关于对象的初学者问题并存储它们。我需要使用一个名为得分的属性创建一个名为 GameEntry 的单独类,然后我需要在数组中存储这些 GameEntry 对象。不只是任何数组,虽然它必须是方括号:[]

奇怪的是,我可以使用ArrayList让它工作但是使用一个简单的数组就像是不可能的任务?有人可以帮忙吗?

class GameEntry {
    int scores;

    GameEntry(int s) {
        scores = s;
    }
}

public class R11ScoreArray {
     public static void main(String[] args) {
        GameEntry[] scoreArray; // declares that scoreArray is an array of
                            // 'GameEntry'
        scoreArray = new GameEntry[4]; // create array of 4 elements
        scoreArray[0] = new GameEntry(10);
        scoreArray[0] = new GameEntry(100);
        scoreArray[0] = new GameEntry(1000);
        scoreArray[0] = new GameEntry(10000);
        for (int i = 0; i < scoreArray.length; i++) {
            System.out.println(Arrays.toString(scoreArray));
        }
    }
}

2 个答案:

答案 0 :(得分:4)

说明

我认为你有点误解了如何使用数组。创建数组就像这样

GameEntry[] scoreArray = new GameEntry[4];

此数组现在可以容纳4 GameEntry个对象。它是

的缩写
// Declare
GameEntry[] scoreArray;

// Allocate
scoreArray = new GameEntry[4];

您可以使用索引设置和访问这些对象,例如

// Set the first object, at index 0
scoreArray[0] = new GameEntry(10);

// Set the second object, at index 1
scoreArray[1] = new GameEntry(100);

// Access the first object
System.out.println(scoreArray[0].scores);

// Access the second object
System.out.println(scoreArray[1].scores);

此外,您的印刷声明没有多大意义:

for (int i = 0; i < scoreArray.length; i++) {
    System.out.println(Arrays.toString(scoreArray));
}

它再次在每次迭代中对整个数组进行字符串化。那么为什么要将它包含在循环中呢?您可能打算迭代数组并手动访问元素。 Arrays.toString方法已经自己迭代了数组。这就像问{em>} 4次问题&#34;整个数组是如何形成的?&#34;

解决方案

所以你的代码应该看起来像

// Declare and allocate the array
GameEntry[] scoreArray = new GameEntry[4];

// Set elements at indices 0-3
scoreArray[0] = new GameEntry(10);
scoreArray[1] = new GameEntry(100);
scoreArray[2] = new GameEntry(1000);
scoreArray[3] = new GameEntry(10000);

// Iterate the array
for (int i = 0; i < scoreArray.length; i++) {
    // Access the element at index i
    GameEntry currentObject = scoreArray[i];

    // Print some info about the object
    System.out.println("Current object is: " + currentObject);
    System.out.println("It has a score of: " + currentObject.scores);
}

关于打印对象的注意事项

如果您打印像

这样的对象
// GameEntry@15db9742
System.out.println(currentObject);

它将调用currentObject.toString(),这是一个每个对象都有的方法(因为它是每个类隐式扩展的Object类的一部分)。如果你不覆盖这个方法,它将回退到Object类的默认实现,它打印类名和一些标识当前JVM实例中对象的代码。

以下是如何覆盖它

class GameEntry {
    // Other stuff
    ...

    @Overwrite
    public String toString() {
        return "GameEntry[score=" + scores + "]";
    }
}

现在声明会像

一样打印出来
// GameEntry[score=10]
System.out.println(currentObject);

答案 1 :(得分:2)

不确定这是否会对您有所帮助,但我试图让您了解如何在数组中存储对象。

public static void main(String[] args) {
    // If you know the number of objects you're going to store
    int definedSize = 10;

    // Create your array like this
    Object[] objArray = new Object[definedSize];

    // If you don't then use an ArrayList
    ArrayList<Object> objList = new ArrayList<Object>();

    // And use this method to get an array instead of a list
    objArray = objList.toArray();
}