**
关于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();
}
}
谢谢大家的阅读,有问题可以与博主相互交流。