如何在java中保存对象数组的值?

时间:2013-06-16 10:08:37

标签: java arrays

我是一名初学程序员,我似乎无法在代码中找到错误。

我有一个对象(人)的arraylist,我想将索引的值保存到变量中:

public void randomCaptain(){
    Random dice = new Random ();
    int n = dice.nextInt(personList.size());
    Person theCaptain = personList.get(n);
    System.out.println(theCaptain);
}

首先,我想要一个介于1和我的arraylist中的人数之间的随机数。 在此之后我想要点n的值,所以我的arraylist的人n并将其保存到Person'theCaptain'中。我用personList.get(n)尝试了这个。 但是,如果我通过println检查此值,则返回'null'。 我检查了我的数组等的大小,数组不是空的。所以这不是问题。

修改

这是数组初始化的部分:

public class Team{
    ArrayList<Person> personList = new ArrayList<Person>();
    void init(){

    //Adding persons to the list

    personList.add(new Coach("Tesan de Boer", "Straatweg 45", 2222));
    personList.add(new GoalKeeper("Peter Post", "Straatweg 45", 2222, 1));
    personList.add(new GoalKeeper("piet puk", "Straatweg 45", 2222, 21));
    personList.add(new GoalKeeper("Siem van Aanhoolt", "Straatweg 45", 2222, 31));
    personList.add(new Captain("Denis van rijn", "Straatweg 45", 2222, 5));
    personList.add(new Fielder("Koen Weegink", "Straatweg 45", 2222, 2));
    personList.add(new Fielder("Jan-Willem Rufus op den Haar", "Straatweg 45", 2222, 3));
    personList.add(new Fielder("Tom Kraniker", "Straatweg 45", 2222, 4));
    personList.add(new Fielder("Leon het Kanon", "Straatweg 45", 2222, 6));
    personList.add(new Fielder("Robin Hogezant", "Straatweg 45", 2222, 7));
    personList.add(new Fielder("Loesoe de Kat", "Straatweg 45", 2222, 8));
    personList.add(new Fielder("Morris de Spee", "Straatweg 45", 2222, 9));
    personList.add(new Fielder("Rein Zoekers", "Straatweg 45", 2222, 10));
    personList.add(new Fielder("Darion Pok", "Straatweg 45", 2222, 11));
    personList.add(new Fielder("Achmed de Bom", "Straatweg 45", 2222, 12)); 
    }

当我用size()检查时,它正确返回15。所以这应该不是问题。

主要:

    Team team= new Team();
        team.init();
        team.randomCaptain();

我希望你能帮助我,谢谢

2 个答案:

答案 0 :(得分:2)

我认为您的计划没有任何问题。我能够多次运行您的程序,无法重现null输出。

你可以在这里试试 - http://ideone.com/tVFq4d

答案 1 :(得分:1)

您在此处发布的代码似乎与我所知道的完美配合。

另外你说“我想要一个介于1和我的arraylist中的人数之间的随机数” - 你的意思是你从不想选择教练担任队长吗?因为random.nextInt()调用可以返回0所以请注意这一点!

import java.util.ArrayList;
import java.util.Random;

public class Test {

    public static void main(String[] args) {
        Team team = new Team();
        team.init();
        team.randomCaptain();
    }
}

class Person {

}

class Coach extends Person {
    public Coach(String string, String string2, int i) {
    }
}

class GoalKeeper extends Person {
    public GoalKeeper(String string, String string2, int i, int j) {
    }
}

class Captain extends Person {
    public Captain(String string, String string2, int i, int j) {
    }
}

class Fielder extends Person {
    public Fielder(String string, String string2, int i, int j) {
    }
}

class Team {
    ArrayList<Person> personList = new ArrayList<Person>();

    void init() {

        // Adding persons to the list

        personList.add(new Coach("Tesan de Boer", "Straatweg 45", 2222));
        personList.add(new GoalKeeper("Peter Post", "Straatweg 45", 2222, 1));
        personList.add(new GoalKeeper("piet puk", "Straatweg 45", 2222, 21));
        personList.add(new GoalKeeper("Siem van Aanhoolt", "Straatweg 45",
                2222, 31));
        personList.add(new Captain("Denis van rijn", "Straatweg 45", 2222, 5));
        personList.add(new Fielder("Koen Weegink", "Straatweg 45", 2222, 2));
        personList.add(new Fielder("Jan-Willem Rufus op den Haar",
                "Straatweg 45", 2222, 3));
        personList.add(new Fielder("Tom Kraniker", "Straatweg 45", 2222, 4));
        personList.add(new Fielder("Leon het Kanon", "Straatweg 45", 2222, 6));
        personList.add(new Fielder("Robin Hogezant", "Straatweg 45", 2222, 7));
        personList.add(new Fielder("Loesoe de Kat", "Straatweg 45", 2222, 8));
        personList.add(new Fielder("Morris de Spee", "Straatweg 45", 2222, 9));
        personList.add(new Fielder("Rein Zoekers", "Straatweg 45", 2222, 10));
        personList.add(new Fielder("Darion Pok", "Straatweg 45", 2222, 11));
        personList.add(new Fielder("Achmed de Bom", "Straatweg 45", 2222, 12));
    }

    public void randomCaptain() {
        Random dice = new Random();
        // Random.nextInt(n) returns a number between 0 (inclusive) and n (exclusive) so it will always pick a valid index in the array list.
        int n = dice.nextInt(personList.size());
        Person theCaptain = personList.get(n);
        System.out.println(theCaptain);
    }
}

这是输出:

Fielder@e83912

我还在一个循环中运行了team.randomCaptain()函数 - 我运行了1亿多次,并且从未将null分配给theCaptain