如何在我的ArrayList中生成随机索引?

时间:2018-11-11 23:39:20

标签: java arraylist random nullpointerexception

所以我有一个杯赛,它是课堂比赛的一部分。公共int select()方法必须返回c中的移动。我需要生成一个到c的随机索引,并被告知要生成一个从0到不包括ArrayList大小的随机数。这是我所拥有的:

import java.util.ArrayList;
import java.util.Random;
public class Cup {

    ArrayList<Integer> c = new ArrayList<Integer>();
    private Random r;

    public Cup() {
        c.add(1);
        c.add(2);
        c.add(3);
        Random r = new Random();
    }

    public int count() {
        return c.size();
    }

    public int select() {
        int index = r.nextInt(c.size());
        return c.get(index);
    }

    public void remove(int m) {
        c.remove(m);
    }
}

当我在使用的游戏中编译它时,它可以正确编译,但告诉我在r.nextInt(c.size())所在的行上有一个Null Pointer异常。只是非常令人困惑,因为我觉得这应该是正确的。谢谢!!!

1 个答案:

答案 0 :(得分:1)

在构造函数中,您不需要Random r,因为您已经有了private Random r;

其余的似乎正常。请注意您的remove(int m)方法,以免用户传递的值大于ArrayList的大小,以避免IndexOutOfBoundsException。

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

public class Cup {

    ArrayList<Integer> c = new ArrayList<Integer>();
    private Random r;

    public Cup() {
        c.add(1);
        c.add(2);
        c.add(3);

        //here you should use your r attribute
        r = new Random();
    }

    public int count() {
        return c.size();
    }

    public int select() {
        int index = r.nextInt(c.size());
        return c.get(index);
    }

    public void remove(int m) {
        c.remove(m);
    }
}