我是一名初学程序员,我似乎无法在代码中找到错误。
我有一个对象(人)的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();
我希望你能帮助我,谢谢
答案 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
。