Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对象-即arraylist<;字符串>;-给出NullPointerException错误_Java_Android_Nullpointerexception - Fatal编程技术网

Java 对象-即arraylist<;字符串>;-给出NullPointerException错误

Java 对象-即arraylist<;字符串>;-给出NullPointerException错误,java,android,nullpointerexception,Java,Android,Nullpointerexception,我创建了一个类来创建一个对象,它是一个由4个元素组成的ArrayList——它们被选为另一个ArrayList的一系列随机元素,并且它们必须是唯一的 当我运行应用程序并创建对象时,下一步是进入对象并取出元素并使用它们中的每一个-不幸的是,在第一个元素LogCat给了我致命错误-NullPointerException,并说null是类的set方法,其中bigerarraylist的随机元素被添加到应该添加的元素中由setter填充 我不明白为什么——用于在活动中生成随机元素的相同代码工作得很好,

我创建了一个类来创建一个对象,它是一个由4个元素组成的
ArrayList
——它们被选为另一个
ArrayList
的一系列随机元素,并且它们必须是唯一的

当我运行应用程序并创建对象时,下一步是进入对象并取出元素并使用它们中的每一个-不幸的是,在第一个元素LogCat给了我
致命错误-NullPointerException
,并说
null
是类的set方法,其中
biger
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;
    }
}
公共类QuizSetGenerator{
私有数组列表集;
QuizSetGenerator(ArrayList列表){
this.SetQuizSet(list);//logcat中指向的第二个Null
}
公共无效SetQuizSet(ArrayList a){
//选择1
Random rand=新的Random();
/*int[]索引=新的int[4];
布尔重复=假;
//获取四个0-a.size的随机数,并将它们保存在整数数组中,每个都必须是唯一的

对于(inti=0;i您从不创建集合。您声明它,但从不将其定义为新的ArrayList()。如果没有它,它就不会指向有效的引用。

你从哪里得到错误?你如何调用它?没有主函数。请堆栈跟踪。错误是在新的arraylist中填充了我上面所写的随机选取的“base”arraylist元素。我将在代码中添加注释以使其更清晰。