Java Array返回Null

时间:2017-07-25 15:15:06

标签: java arraylist

因此,当我使用它来选择随机事件的字符串时,它返回一个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,我该怎么做才能解决这个问题?

5 个答案:

答案 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

     

商店中的商品:[]