0

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

我有一个对象(人员)的数组列表,我想将索引的值保存到变量中:

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

首先,我想要一个介于 1 和我的数组列表中的人数之间的随机数。在此之后,我想要点 n 处的值,所以我的数组列表中的人 n 并将其保存到人“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();

我希望你能帮助我,谢谢

4

2 回答 2

2

我看不出你的程序有什么问题。我能够多次运行您的程序并且无法重现null输出。

您可以在这里自己尝试一下 - http://ideone.com/tVFq4d

于 2013-06-16T10:46:50.397 回答
1

据我所知,您在此处发布的代码似乎运行良好。

你还说“我想要一个介于 1 和我的数组列表中的人数之间的随机数”——你的意思是你永远不想选择教练当队长吗?因为 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 亿次,但它从未分配nulltheCaptain.

于 2013-06-16T10:40:37.850 回答