所以我有一个杯赛,它是课堂比赛的一部分。公共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异常。只是非常令人困惑,因为我觉得这应该是正确的。谢谢!!!
答案 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);
}
}