关于java定义属性数组的心得

**

关于java定义属性数组以及对象数组等问题的心得


**最近学完了java,在做java的联系题目时遇到了很多运用到需要指定类属性为一个数组的情况,但每每到这里都会遇到问题,且问题一般都是数组头指针异常或者干脆就是空指针异常,这个相信大家都不陌生。在查阅很多资料后,整理了一下思路,在这里也与大家分享一下,避免小伙伴走类似的弯路。
为了更好地说明问题,我把我的题目放上去,例如第一题:

编写一个含有5个类的程序


类Person:
属性:编号、姓名、性别;
构造方法:确定编号和姓名;
一般方法:修改编号、姓名,获取编号、姓名。
类Teacher:继承类Person并增加:
属性:系别;
构造方法:调用父类的构造方法;
一般方法:修改、获取系别。
类Student:继承类Person并增加:
属性:班级;
构造方法:调用父类的构造方法;
一般方法:修改、获取班级属性值。
类Classes:
属性:班级名称,学生名单(Student类对象的数组)
构造方法:确定班级名称;
一般方法:建立学生名单,输出学生名单。
类Main: 主类。主方法中创建一个班级,然后建立该班级的学生名单,最后 输出学生名单。

这里就有对对象数组的要求,我们在对类Classes定义学生名单的属性时,用到了对象数组,大家可以看下我这里的代码:

class Classes {
    private String classname;
    private Student []SL;//定义对象数组指针

【】SL的规模可以暂时不予考虑,效果不大。你当然可以在这里就用new的方法来创建这个对象数组指针,例如我在其构造方法中就用到了:

this.SL=new Student[n];

这里很多人认为这个对象数组已经创建完毕可以直接拿来用了,其实不然,工作做到这里只是建立好了容器并对这个容器做好了限制条件,即这个容器用来存放什么(Student对象),规模怎样,但是这些数组中每一个指针所指向的依然是null,所以在这里要进一步实例化,new出Student对象,并用对象数组指针分别指向它,不然就会犯空指针异常的错误。这里贴出我的实例化方法,仅供大家参考。

    Classes(int n){
        classname="";
        this.SL=new Student[n];//这里只是定义数组指针,但每个指针都指向NULL(类型只能为Student)
        for(int i=0;i<n;i++)
        SL[i]=new Student();
    }
     Classes(String classname,int n){
        this.classname=classname;
        this.SL=new Student[n];
        for(int i=0;i<n;i++)
            SL[i]=new Student();
    }

弄明白这里,大家就不会再犯类似的错误了。当然博主生性愚笨,总要在同一个地方摔倒两次,所以下一个例子也给大家分享,增加大家的对属性数组的理解。

编写一个程序,其中设计一个矩阵类Matrix,最后计算:

要求Matrix类满足: 1)Matrix的属性有: m,n:int型,矩阵的行、列数; ma:int型两维数组,放置矩阵的数据。
2)Matrix的方法有: Matrix (int m , int n ):构造方法,设置矩阵的行数和列数; cheng(Matrix
a):将当前矩阵与形参矩阵相乘,最后返回乘的结果(Matrix对象); void print():输出矩阵。

情况个上文一脉相承,只不过这里是定义一个属性,该属性是一个二维数组,博主就不在一一赘述,有兴趣的可以接下来往下看我的代码,仅供参考:

import java.util.Scanner;
class Matrix{
    private int m;//行
    private int n;//列
    private int ma[][];
    Matrix(){}
    Matrix(int m,int n){
        this.m=m;
        this.n=n;
        //setData();
    }
    public void setData(){
        Scanner sn=new Scanner(System.in);
            ma=new int[m][n];//-----留心这里需要使数组实例化,不然会出现NoneIndexOfBoundsValueException:0的错误
            for(int i=0;i<this.m;i++)
            for(int j=0;j<this.n;j++)
                this.ma[i][j]=sn.nextInt();//----------数组下标错误
    }
    public Matrix cheng(Matrix a){
        Matrix result=new Matrix(this.m,a.n);
        result.ma=new int[this.m][a.n];
        for(int i=0;i<this.m;i++)
            for(int j=0;j<a.n;j++){
                int sum=this.ma[i][0]*a.ma[0][j];
                for(int k=1;k<this.n;k++)
                    sum+=this.ma[i][k]*a.ma[k][j];
                result.ma[i][j]=sum;
            }
        return result;
    }
    public void print(){
        for(int i=0;i<this.m;i++)
        {
            for(int j=0;j<this.n;j++)
                System.out.print(this.ma[i][j]+" ");
            System.out.println();
        }

    }
    public static void main(String[]args){
        Matrix mx1=new Matrix(2,3);
        mx1.setData();
        mx1.print();
        Matrix mx2=new Matrix(3,2);
        mx2.setData();
        mx2.print();
        Matrix mx3=mx1.cheng(mx2);
        mx3.print();
    }
}

谢谢大家的阅读,有问题可以与博主相互交流。

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值