有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么这段代码在这里给我一个空异常错误?

为什么会抛出空异常指针错误?我如何修复此错误?谢谢。如果你能解释一下该怎么做。我试图将txt文件中的每一行存储到一个arraylist中,该arraylist进入一个较大的单独行数组列表中

    public static ArrayList<ArrayList<String>> addAfter(String file1)throws IOException{
    Scanner scanner = new Scanner(new File(file1));
    ArrayList<ArrayList<String>> arr = new ArrayList<ArrayList<String>>(); 
    ArrayList<String> a = null;
    boolean check = false;
    while(scanner.hasNextLine())
    {
        String str = scanner.nextLine();
        String[] stringArr = str.split(" +");
        for(int i=0; i<stringArr.length; i++){
            a.add(stringArr[i]); //null exception being thrown here
        }
        stringArr = null;
        arr.add(a);
        a.clear();
    }
    return arr;
    }

共 (3) 个答案

  1. # 1 楼答案

    因此:

    ArrayList<String> a = null;
    

    ArrayList已声明,但未初始化。因此,当访问for循环中的ArrayList时,基本上是在访问一个引用null的变量

    相反,要:

    ArrayList<String> a = new ArrayList<String>();
    

    此外,代码中还有另一个问题: 您希望创建一个ArrayList of ArrayList,其中在循环中传递同一对象的引用(而不是在循环中创建新的ArrayList),并在for循环结束时将其清除。这将导致将相同的ArrayList添加到ArrayList<ArrayList<>>的所有索引中。 对于要插入到arrayList中的每一个新行,都必须执行new ArrayList<String>()

    修改代码以执行相同操作:

    public static ArrayList<ArrayList<String>> addAfter(String file1)throws IOException{
    Scanner scanner = new Scanner(new File(file1));
    ArrayList<ArrayList<String>> arr = new ArrayList<ArrayList<String>>(); 
    ArrayList<String> a = null;
    boolean check = false;
    while(scanner.hasNextLine())
    {
        a = new ArrayList<String>(); // add this
        String str = scanner.nextLine();
        String[] stringArr = str.split(" +");
        for(int i=0; i<stringArr.length; i++){
            a.add(stringArr[i]); //null exception being thrown here
        }
        stringArr = null;
        arr.add(a);
        //a.clear();   remove this line
    }
    return arr;
    

    在Java中,传递引用而不是值(对于对象)

  2. # 2 楼答案

    您没有初始化“a”ArrayList对象

    ArrayList<String> a = new ArrayList<>();
    

    而不是

    ArrayList<String> a = null;
    

    在Java中,对象变量不包含对象本身,而是对对象在内存中实际位置的引用。当您获得NullPointerException时,这意味着Java无法访问对象,因为对象变量为null而不是对象的引用

  3. # 3 楼答案

    用这个

    ArrayList<String> a = new ArrayList<>();