空指针异常Java 2d String

时间:2015-03-18 13:41:13

标签: java arrays nullpointerexception

所以我有一个字符串[] [],我想从我的数据库中保存一些信息。 Eclipse告诉我我需要初始化我的string [] [],所以我说string []] [] = null。现在我得到一个空指针异常,但我不确定我做错了什么。

try {
            Statement st = con.createStatement();
            String systems[][] = null;
            int firstcounter = 0;

            String item = "SELECT ram, cpu, mainboard, cases, gfx FROM computer_system";

            ResultSet rs = st.executeQuery(item);
            while (rs.next()){
                systems[firstcounter][0] = rs.getString("ram");
                systems[firstcounter][1] = rs.getString("cpu");
                systems[firstcounter][2] = rs.getString("mainboard");
                systems[firstcounter][3] = rs.getString("cases");
                systems[firstcounter][4] = rs.getString("gfx");
                firstcounter++;
            }
            System.out.println(systems[0][0]);

3 个答案:

答案 0 :(得分:5)

您应该将数组初始化为非null值,以便使用它:

String systems[][] = new String[n][5];

其中n是数组的最大容量。

如果您事先不知道数组应包含多少行,则可以改为使用ArrayList<String[]>,因为ArrayList的容量可以增长。

例如:

        Statement st = con.createStatement();
        List<String[]> systems = new ArrayList<String[]>();
        String item = "SELECT ram, cpu, mainboard, cases, gfx FROM computer_system";
        ResultSet rs = st.executeQuery(item);
        while (rs.next()){
            String[] row = new String[5];
            row[0] = rs.getString("ram");
            row[1] = rs.getString("cpu");
            row[2] = rs.getString("mainboard");
            row[3] = rs.getString("cases");
            row[4] = rs.getString("gfx");
            systems.add(row);
        }

答案 1 :(得分:2)

这是因为,您将systems[][]初始化为null

请尝试使用String systems[][] = new String[x][y];,其中x和y是矩阵的尺寸。

但是我们不喜欢Java代码中的数组,而是使用Lists。列表可以扩展,但矩阵不能,列表提供编译时类型检查,因此使用起来更安全。有关更多信息,请参阅Joshua Bloch的Effective Java中的第25项,其中说:

  

第25项:首选列表到数组

答案 2 :(得分:1)

您需要按以下方式初始化

String systems[][] = new String[size][size];

其中size =您想要的字符串数组的大小。