因此,当我使用它来选择随机事件的字符串时,它返回一个null:
public static List<String> pickNRandom(List<String> lst, int n) {
List<String> copy = new LinkedList<String>(lst);
Collections.shuffle(copy);
return copy.subList(0, n);
}
static List<String> randomP;
public List<String> items(){
List<String> teamList = new LinkedList<String>();
teamList.add("team1");
teamList.add("team2");
teamList.add("team3");
teamList.add("team4");
teamList.add("team5");
teamList.add("team6");
List<String> randomPicks = pickNRandom(teamList, 3);
randomPicks = randomP;
return randomPicks;
}
public static void Store() {
Random rand = new Random();
int people = rand.nextInt(50) + 1;
List<String> itemsIn = randomP;
System.out.println("People in store: "+people + "\nItems in store: "+itemsIn);
}
public static void main(String[] args) {
Store();
}
为什么它返回null,我该怎么做才能解决这个问题?
答案 0 :(得分:1)
在此行List<String> itemsIn = randomP;
中,您指定了未初始化的列表,其默认值为null
。我认为你的行应该是这样的:List<String> itemsIn = items();
记得将方法items()
更改为静态。
答案 1 :(得分:1)
问题很明确,但不是问题(它可以有不同的解决方案)......我添加了一些小改动。
public static List<String> pickNRandom(List<String> lst, int n) {
List<String> copy = new LinkedList<String>(lst);
Collections.shuffle(copy);
return copy.subList(0, n);
}
public static List<String> items(){
List<String> teamList = new LinkedList<String>();
teamList.add("team1");
teamList.add("team2");
teamList.add("team3");
teamList.add("team4");
teamList.add("team5");
teamList.add("team6");
return pickNRandom(teamList, 3);
}
public static void Store() {
Random rand = new Random();
int people = rand.nextInt(50) + 1;
List<String> itemsIn = items();
System.out.println("People in store: "+people + "\nItems in store: "+itemsIn);
}
public static void main(String[] args) {
Store();
}
店内人士:10
商店中的商品:[team6,team2,team3]
在你的代码randomP
中没用(从未初始化,从未填写)
答案 2 :(得分:0)
您尚未在任何时候发起List<String> randomP
。
答案 3 :(得分:0)
它不会返回null。您可以在此处使用未初始化的变量立即覆盖函数返回的内容:
randomPicks = randomP;
目前尚不清楚为什么会这样......但不要这样做。
答案 4 :(得分:0)
randomP 已声明但尚未初始化,items()
永远不会被调用,与pickNRandom
相同
所以你可以初始化列表(但这并不意味着它将被填充......)
static List<String> randomP = new ArrayList<>();
您将获得一个空列表而不是null
店内人士:12
商店中的商品:[]