Java 如何根据程序开始时生成的数据初始化全局矩阵?

Java 如何根据程序开始时生成的数据初始化全局矩阵?,java,exception,Java,Exception,我正在创建一个必须保存许多信息的程序,其中一个存储一个矩阵,其思想是根据项目是否存在(0)来保持0或-1,在另一种情况下是(-1)。但是当我试图在一个方法中初始化这个矩阵时,会生成一个nullPointerException 我试图通过如下方式初始化矩阵来修复它: public static int libros[][]= new int[arrayListLibros.size()][numeroMayor()]; 但它会产生另一个错误 Exception in thread "main"

我正在创建一个必须保存许多信息的程序,其中一个存储一个矩阵,其思想是根据项目是否存在(0)来保持0或-1,在另一种情况下是(-1)。但是当我试图在一个方法中初始化这个矩阵时,会生成一个nullPointerException

我试图通过如下方式初始化矩阵来修复它:

public static int libros[][]= new int[arrayListLibros.size()][numeroMayor()];
但它会产生另一个错误

Exception in thread "main" java.lang.ExceptionInInitializerError
at Modelo.Main.main(Main.java:26)
Caused by: java.lang.NullPointerException
at Modelo.SistemaDeGestion.<clinit>(SistemaDeGestion.java:19)
... 1 more
其中sistema引用了创建的类。。。cargarDatosLibros的代码如下:

public void cargarDatosLibros() throws Exception {
    arrayListLibros = new ArrayList<>();
    ArrayList<String> lineas = leerArchivo("libros.txt");

    for (int i = 0; i < lineas.size(); i++) {
        String libro[] = {"", "", "", "", "", "", ""};
        int c1 = lineas.get(i).indexOf("~T");
        int c2 = lineas.get(i).indexOf("~A");
        libro[0] = lineas.get(i).substring(c1 + 2, c2);
        int c3 = lineas.get(i).indexOf("~A");
        int c4 = lineas.get(i).indexOf("~E");
        libro[1] = lineas.get(i).substring(c3 + 2, c4);
        int c5 = lineas.get(i).indexOf("~E");
        int c6 = lineas.get(i).indexOf("~Tem");
        libro[2] = lineas.get(i).substring(c5 + 2, c6);
        int c7 = lineas.get(i).indexOf("~Tem");
        int c8 = lineas.get(i).indexOf("~Edi");
        libro[3] = lineas.get(i).substring(c7 + 4, c8);
        int c9 = lineas.get(i).indexOf("~Edi");
        int c10 = lineas.get(i).indexOf("~Anho");
        libro[4] = lineas.get(i).substring(c9 + 4, c10);
        int c11 = lineas.get(i).indexOf("~Anho");
        int c12 = lineas.get(i).indexOf("~I");
        libro[5] = lineas.get(i).substring(c11 + 5, c12);
        int c13 = lineas.get(i).indexOf("~I");
        int c14 = lineas.get(i).indexOf("~End");
        libro[6] = lineas.get(i).substring(c13 + 2, c14);
        int z = i + 1;
        Libro temp = new Libro(libro[0], libro[1], libro[2], libro[3], libro[4], libro[5], libro[6], z);
        arrayListLibros.add(temp);
    }
}
public void cargarDatosLibros()引发异常{
arrayListLibros=新的ArrayList();
ArrayList lineas=leerArchivo(“libros.txt”);
对于(int i=0;i
所以我不知道是哪一个问题,因为它以前是初始化的


谢谢:)

我想您的
arrayListLibros
没有初始化。加载类时加载静态内容

public static int libros[][]= new int[arrayListLibros.size()][numeroMayor()];
ArrayListLibraros
尚未初始化,因此在调用size()时会导致
NullPointerException
,从而导致
ExceptionInInitializerError

来自API:

表示静态数据库中发生意外异常 初始化器。将抛出ExceptionInInitializerError以指示 在计算静态初始值设定项或 静态变量的初始值设定项

编辑: 如下所示:

public class StaticTestForLaura {
    static List<String> arrayListLibros;
    static {
            arrayListLibros= new ArrayList<String>();
        arrayListLibros.add("Laura");
    }
    public static int libros[]= new int[arrayListLibros.size()];

}
公共类StaticTestForLaura{
静态列表arrayListLibros;
静止的{
arrayListLibros=新的ArrayList();
arrayListLibros.add(“劳拉”);
}
public static int libros[]=new int[arrayListLibros.size()];
}

我想您的
arrayListLibros
没有初始化。加载类时加载静态内容

public static int libros[][]= new int[arrayListLibros.size()][numeroMayor()];
ArrayListLibraros
尚未初始化,因此在调用size()时会导致
NullPointerException
,从而导致
ExceptionInInitializerError

来自API:

表示静态数据库中发生意外异常 初始化器。将抛出ExceptionInInitializerError以指示 在计算静态初始值设定项或 静态变量的初始值设定项

编辑: 如下所示:

public class StaticTestForLaura {
    static List<String> arrayListLibros;
    static {
            arrayListLibros= new ArrayList<String>();
        arrayListLibros.add("Laura");
    }
    public static int libros[]= new int[arrayListLibros.size()];

}
公共类StaticTestForLaura{
静态列表arrayListLibros;
静止的{
arrayListLibros=新的ArrayList();
arrayListLibros.add(“劳拉”);
}
public static int libros[]=new int[arrayListLibros.size()];
}

在我看来,
ArrayListLibraros
libros
初始化的时候还没有被初始化。

在我看来,
ArrayListLibraros
libros
初始化的时候还没有被初始化。

你正在向你的ArrayListLibraros请求数据,却从来没有被初始化过检索数据。具有nullpointer异常可能意味着某些内容尚未初始化(例如,其值为null)


如果要调试此代码,您会看到arraylist的值设置为null。发生这种情况时,您应该查找arraylist的初始化,如果没有,则对其进行初始化。在我的经验中,另一个常见的错误是在初始化对象之前调用与对象的特定交互。

您正在从ArrayListLibraro请求数据,而从未检索到该数据。具有nullpointer异常可能意味着某些内容尚未初始化(例如,其值为null)


如果要调试此代码,您会看到arraylist的值设置为null。发生这种情况时,您应该查找arraylist的初始化,如果没有,则对其进行初始化。根据我的经验,另一个常见错误是在初始化对象之前调用与对象的特定交互。

SistemaDeGestion.java
的第19行在哪里?第19行是public static int libros[][]=new int[arrayListLibros.size()][numeroMayor();其中是SistemaDeGestion.java的第19行?第19行是公共静态int libros[]][]=new int[arrayListLibros.size()][numeroMayor()];所以,它必须是一个非静态声明,或者根据数组的大小如何初始化它?但是ArrayListIbros不是空的。@Laura你能发布你的全部代码吗,似乎有些可疑:)@Laura假设
SistemaDeGestion sistema=new SistemaDeGestion()
位于main内部,加载静态内容时不会对其求值,您正在初始化cardewatever方法中的ArrayListLibraros,该方法位于
系统Degestion中