求教:Java遍历对象二维数组抛出NullPointerException异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求教:Java遍历对象二维数组抛出NullPointerException异常相关的知识,希望对你有一定的参考价值。

我通过数据库查询一个表中的数据,然后将数据赋给一个对象数组,当遍历这个数组的时候,其所有值均可以显示,但是就是会在最后补一句
Exception in thread "main" java.lang.NullPointerException
求教。
下面是通过数据库查询数据并赋给数组的方法

public Object[][] member_values(String stName)
connectDb();//连接数据库
PreparedStatement pstmt = null ;
Object[][] data = null;
ResultSet rs;
try
String sql = "SELECT count(*) as au_count from st_member_info ";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
rs.next();
int iCount=rs. getInt( "au_count");
data=new Object[iCount][];
int i=0;
String sql1 = "SELECT * from st_member_info where CName='"+stName+"'";
pstmt=conn.prepareStatement(sql1);
rs=pstmt.executeQuery();
while(rs.next())
data[i]=new Object[7];
data[i][0]=rs. getString( "CName");
data[i][1]=rs. getString( "CNo");
data[i][2]=rs. getString( "School");
data[i][3]=rs. getString( "MName");
data[i][4]=rs. getString( "MNo");
data[i][5]=rs. getString( "MGrade");
data[i][6]=rs. getString( "MPosition");
i++;

catch (SQLException e)
e.printStackTrace();

closeDb();
return data;

参考技术A 访问了一个没有赋值的对象,根据异常抛出位置(没有日志的话就对整段代码try catch这个异常,看打印出来的日志栈的异常抛出位置),看是哪一行代码写错了 参考技术B 空指针最好找,看他报的是哪行错误提示,加断点执行,看看哪个值是为null追问

找到了,是因为我之前做了一个统计,统计一共存在多少条数据,在查询语句里面没有加条件约束,导致查询出的数据比统计出的条数少,造成了出现空指针,非常感谢

本回答被提问者采纳

Java学习笔记2.6.2 数组 - 二维数组

文章目录

零、本讲学习目标

  1. 了解二维数组使用场景
  2. 掌握二维数组的基本使用

一、引入多维数组的场景

  • 在程序中可以通过一个数组来保存某个班级学生的考试成绩,试想一下,如果要统计一个学校各个班级学生的考试成绩,又该如何实现呢?

  • 上面这种场景就需要用到多维数组,多维数组可以简单地理解为在数组中嵌套数组。而在程序中,比较常见的多维数组是二维数组。

二、二维数组的定义

(一)指定二维数组行数与列数

int[][] xx = new int[3][4];

  • 上面的代码相当于定义了一个3*4的二维数组,这个二维数组的长度为3,可以将它看成3个int[]类型的一维数组,每个一维数组中的元素又是一个长度为4的一维数组。

(二)指定二维数组行数,不指定列数

int[][] xx = new int[3][];

  • 第二种方式和第一种类似,只是数组中每个元素的长度不确定。

(三)直接使用嵌套大括号“”静态初始化二维数组

int[][] xx = 1, 2, 3, 4, 5, 6, 7, 8, 9;

  • 上面的二维数组中定义了三个元素,这三个元素都是数组,分别为1, 2、3, 4, 5, 6、7, 8, 9 。

三、二维数组的使用

(一)二维数组的遍历

  • 二维数组的遍历要采用双重循环才能实现

任务:遍历二维数组的遍历与访问行列元素

package net.hw.lesson08;

/**
 * 功能:演示二维数组的遍历与行列元素的访问
 * 作者:华卫
 * 日期:2020年4月25日
 */
public class Example811 
    public static void main(String[] args) 
        // 1. 创建3行4列的二维数组
        int[][] a = new int[3][4];

        a[0][0] = 100; // 给第1行第1列元素赋值
        a[1][2] = 150; // 给第2行第3列元素赋值

        System.out.println("a[0][0] = " + a[0][0]);
        System.out.println("a[1][2] = " + a[1][2]);

        int sum = a[0][0] + a[1][2];
        System.out.println("a[0][0] + a[1][2] = " + sum);

        // 2. 创建3行的二维数组(不规则二维数组)
        int[][] b = new int[3][];
        b[0] = new int[2]; // 第1行包含2个元素
        b[1] = new int[3]; // 第2行包含3个元素
        b[2] = new int[4]; // 第3行包含4个元素

        // 遍历二维数组,初始化每个数组元素
        for (int i = 0; i < b.length; i++) 
            for (int j = 0; j < b[i].length; j++) 
                b[i][j] = (i + 1) * (j + 1);
            
        

        // 遍历二维数组,按行列输出数组元素
        System.out.println("数组b全部元素:");
        for (int i = 0; i < b.length; i++) 
            for (int j = 0; j < b[i].length; j++) 
                System.out.print(b[i][j] + "\\t");
            
            System.out.println(); // 换行
        

        // 3. 静态初始化二维数组
        int[][] c = 12, 45, 66, 24, 56, 78, 90, 32, 32, 44, 56, 98;

        System.out.println("数组c全部元素:");
        for (int i = 0; i < c.length; i++) 
            for (int j = 0; j < c[i].length; j++) 
                System.out.print(c[i][j] + " ");
            
            System.out.println(); // 换行
        

        System.out.println("第2行第3列元素:" + c[1][2]);

        System.out.print("第3行的全部元素:");
        for (int j = 0; j < c[2].length; j++) 
            System.out.print(c[2][j] + " ");
        
        System.out.println();

        System.out.println("第3列的全部元素:");
        for (int i = 0; i < c.length; i++) 
            System.out.println(c[i][2]);
        
    


  • 运行程序,查看结果

(二)二维数组的均值与最值

任务:求二维数组所有元素的平均值、最大值和最小值

package net.hw.lesson08;

/**
 * 功能:求二维数组的均值与最值
 * 作者:华卫
 * 日期:2020年4月25日
 */
public class Example812 
    public static void main(String[] args) 
        // 声明部分
        int[][] a = 
                12, 45, 66, 24,
                56, 78, 90, 32,
                32, 44, 56, 98
        ;
        int sum = 0;
        int average;
        int max, min;

        //处理部分
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                sum += a[i][j];
            
        
        average = sum / (a.length * a[0].length);

        max = a[0][0];  // max = Integer.MIN_VALUE;
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                if (max < a[i][j]) 
                    max = a[i][j];
                
            
        

        min = a[0][0]; // min = Integer.MAX_VALUE;
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                if (min > a[i][j]) 
                    min = a[i][j];
                
            
        

        //输出部分
        System.out.println("平均值:" + average);
        System.out.println("最大值:" + max);
        System.out.println("最小值:" + min);
    

  • 运行程序,查看结果

    说明:average = sum / (a.length * a[0].length);针对规则的二维数组没有问题,但是对于不规则的二维数组(数组每一行的元素个数不同)就是错误的处理方式。

思考题:如何计算不规则二维数组的平均值?

  • 创建Example812_
package net.hw.lesson08;

/**
 * 功能:求二维数组均值和最值
 * 作者:华卫
 * 日期:2020年05月11日
 */
public class Example812_ 
    public static void main(String[] args) 
        // 声明部分(静态初始化一个二维数组)
        int[][] a = 
                12, 45,
                56, 78, 90, 32,
                32, 44, 56
        ;
        int sum = 0;
        int average;
        int max, min;
        int count = 0;

        // 处理部分
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                sum += a[i][j];
            
        
        for (int i = 0; i < a.length; i++) 
            count += a[i].length;
        
        average = sum / count;

        max = Integer.MIN_VALUE;
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                if (max < a[i][j]) 
                    max = a[i][j];
                
            
        

        min = Integer.MAX_VALUE;
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                if (min > a[i][j]) 
                    min = a[i][j];
                
            
        

        // 输出部分
        System.out.println("元素个数:" + count);
        System.out.println("平均值:" + average);
        System.out.println("最大值:" + max);
        System.out.println("最小值:" + min);
    

  • 在程序开头定义了一个不规则的二维数组,第一行2个元素,第二行4个元素,第三行3个元素,总共有9个元素。
  • 运行程序,查看结果
  • 19计应3班的赖晓桐给出不同计算方法
  • 刚才我们静态初始化了一个不规则二维数组,现在我们要问能否动态初始化一个同样的二维数组呢?下面我们给出案例演示。
package net.hw.lesson08;

/**
 * 功能:静态和动态初始化不规则二维数组
 * 作者:华卫
 * 日期:2020年05月11日
 */
public class Example813 
    public static void main(String[] args) 
        // 静态初始化不规则二维数组
        int[][] a = 
                12, 45,
                56, 78, 90, 32,
                32, 44, 56
        ;

        // 动态初始化不规则二维数组
        int[][] b = new int[3][];
        b[0] = new int[2];
        b[1] = new int[4];
        b[2] = new int[3];

        b[0][0] = 12;
        b[0][1] = 45;
        b[1][0] = 56;
        b[1][1] = 78;
        b[1][2] = 90;
        b[1][3] = 32;
        b[2][0] = 32;
        b[2][1] = 44;
        b[2][2] = 56;

        // 输出二维数组a
        System.out.println("数组a:");
        for (int i = 0; i < a.length; i++) 
            for (int j = 0; j < a[i].length; j++) 
                System.out.print(a[i][j] + "\\t");
            
            System.out.println();
        

        System.out.println("数组b:");
        for (int i = 0; i < b.length; i++) 
            for (int j = 0; j < b[i].length; j++) 
                System.out.print(b[i][j] + "\\t");
            
            System.out.println();
        
    

  • 运行程序,查看结果

(三)二维数组与一维数组的相互转换

1、二维数组转换成一维数组

2、一维数组转换成二维数组

四、课后作业

任务:利用二维数组打印杨辉三角形

  • 杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623 ~ 1662)在1654年发现这一规律,所以这个表又叫做帕 斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

\\qquad ( a + b ) 1 = a + b (a+b)^1=a+b (a+b)1=a+b
\\qquad ( a + b ) 2 = a 2 + 2 a b + b 2 (a+b)^2=a^2+2ab+b^2 (a+b)以上是关于求教:Java遍历对象二维数组抛出NullPointerException异常的主要内容,如果未能解决你的问题,请参考以下文章

菜鸟求教,arraylist里面放数组,应该怎么遍历?如下:

java使用foreach语句遍历二维数组如何实现?

无法遍历我的数组/对象。 Javascript,React Native [重复]

java解析java中的数组

Java 如何遍历数组里面的数据?

java:把查询结果存储到resultSet对象中,在把该对象的数据放置在一个JTable对象中