我创建了一个类,使一个对象成为4个元素的ArrayList<String>
- 它们被选为另一个ArrayList<String>
的一系列随机元素,并且它们必须是唯一的。
当我运行应用程序并创建一个对象时,下一步是进入对象并取出元素并使用它们 - 不幸的是,第一个元素LogCat给了我fatal error - NullPointerException
并说null
在类的set方法中,bigger
arraylist的随机元素被添加到应该由setter填充的元素中。
我不明白为什么 - 用于在活动中生成随机元素的相同代码工作正常,但我想用一个对象来做,因为它会完成几次。我尝试过不同的方式,但结果每次都是一样的。也许我犯了一个愚蠢的错误,或者我错过了什么。我将不胜感激任何帮助。代码如下......
班级:
public class QuizSetGenerator {
private ArrayList<String> set;
QuizSetGenerator(ArrayList<String> list) {
this.SetQuizSet(list); //second Null Pointed in logcat
}
public void SetQuizSet(ArrayList<String> a) {
//option 1
Random rand = new Random();
/*int[] index = new int[4];
boolean repeats = false;
//get four random numbers 0-a.size and save them in an int array, each of them must be unique
for(int i=0; i<4; ) {
index[i] = rand.nextInt(a.size());
for(int j=0; j<i; j++) {
if(index[j]==index[i]) {
repeats = true; break;
}
}
this.set.add(a.get(index[i])); //First null show in logcat
i++;
}*/
//option2
int[] n = new int[5];
boolean repeats = false;
for(int j=0; j<5; ) {
do {
n[j] = rand.nextInt(a.size());
for(int i=0; i<j; i++) {
if(n[i]==n[j]) {
repeats = true; break;
}
}
} while (repeats);
this.set.add(a.get(n[j])); //First null shown in logcat
j++;
}
//option3
/*for(int i=0; i<4; i++) {
Collections.shuffle(a);
this.set.add(a.get(0)); //First null show in logcat
}*/
}
public ArrayList<String> GetQuizSet() {
return this.set;
}
}
答案 0 :(得分:0)
你永远不会创造集合。你声明它,但永远不要将它定义为新的ArrayList()。没有它,它没有指向有效的参考。