Java初学者,看后定有收获面向对象的题!!!!

本文面向Java学习者,讲解如何用Java实现矩阵类。先提出定义矩阵类及相关方法的题目,接着阐述解题思路,包括明确矩阵属性、初始化矩阵等。然后分块讲解矩阵类定义、初始化、相加、乘法、转置和输出方法的代码,最后给出完整矩阵类和测试类代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(这是我初学时候第一个亲手敲的第一个面向对象的题目)

前言:

(各位Java学习者门好,相信大家刚开始学Java的时候对于面向对象这个思想都或多或少有些还不怎么理解,相信大家在看完我的讲解题目后会有较大些帮助)在这里插入图片描述

题目:

1.定义一个矩阵类,2.成员变量有row、column 3.类中定义一个二维数组用于存放元素 4.分别定义出 (五个方法)初始化矩阵的方法、矩阵加法、矩阵乘法、矩阵转置的方法,以及最后输出矩阵的方法,最后在测试类中完成测试。

解题思路:

1:先弄清楚矩阵该有的属性,以各个题目要求的方法需要满足的条件:
毫无疑问的是矩阵有最基本的 行(row),列(column)两个属性,这是每当我们new出一个矩阵(Matrix)对象时候,就带有的属性,:毫无疑问这时候我们就要对Matrix类的new对象的构造方法进行作出操作了
2.对初始化矩阵:对二维数组数组进行操作了
3.剩下的方法,首先判断需要满足的条件,再对矩阵具体对象作出操作

代码分块顺序讲解(一看就会!!!)

(截取部分代码讲解)

1.矩阵类的定义

//定义矩阵类
 public class Matrix{
    int row;
    int column;
    int [][]A; //定义一个二维数组用于存放矩阵的元素

    //无参构造
    public Matrix() {
    }

    //有参构造
    public Matrix(int h,int l){
        row=h;
        column=l;
        A=new int[h][l]; // 对数组进行new对象,数组对象初始化的时候必须要有对象不能为null
    }

这部分便是对矩阵类的基本属性的定义,有参构造可对矩阵的一些基本属性初始化。(无参构造加上比较好)
(注:数组只是给了空间,其元素并未由我们赋予,系统默认元素为0)

2.定义矩阵初始化方法

(思路:1.矩阵初始化即为对矩阵对象内的二维数组赋值
2.for循环输入二维数组的每一行)
代码如下:(内有详细的注释)

//定义初始化矩阵方法
    public void AssigmentMatrix(){
        Scanner scanner=new Scanner(System.in);
        int sum=this.row*this.column; //矩阵的总元素等于row X column
        System.out.println("您的矩阵为:"+this.row+"行"+this.column+"列的矩阵,请按第一行顺序输入"+sum+"个元素");
        // for循环遍历输入每一个元素
        for (int i=0;i<this.row;i++){
            System.out.println("请输入第"+(i+1)+"行"+"的"+column+"个元素");
            for (int j=0;j<this.column;j++)
                this.A[i][j]=scanner.nextInt();  // 为每个元素输入值
        }
    }

3.定义矩阵相加方法

(思路:1.判断是否满足矩阵加法的前提条件(行列相等的矩阵)2.矩阵对应位置元素相加)
代码如下:(内有详细的注释)

//定义矩阵相加的方法
    public Matrix MatrixJF(Matrix m){
        if (this.row!=m.row||this.column!=m.column){  // 先判断是否满足矩阵的加法
            System.out.println("两矩阵行列不相等不能相加");
            return null;
        }

        Matrix matrix=new Matrix(); // 定义一个返回的对象
        matrix.row=this.row; //行列赋值
        matrix.column=this.column;
        matrix.A=new int[row][column]; //成员变量数组A也要进行new 对象 ,不然会出现null 异常
        for (int i=0;i<this.row;i++){  // 对应元素相加赋值给要返回对象的元素
            for (int j=0;j<this.column;j++){
                matrix.A[i][j]=this.A[i][j]+m.A[i][j];
            }
        }
        return matrix; //返回矩阵对象
    }

注:(传入的参数为一个(矩阵类型)Matrix,这是我们自己定义的类,看做int,float基本数据类型这样去使用,但实际是个引用数据类型,该方法不加static,需要用Matrix 对象去调用该类的方法,最后的返回值为Matrix类型的对象)

4.矩阵乘法

(思路:1.判断是否满足条件 2.矩阵乘法的方法为:第一个矩阵第一行第一个元素 分别乘以 第二个矩阵的第一列的每一个元素,相加,作为新矩阵的第一行第一个元素,以此类推)
代码如下:(内有详细的注释)

//定义矩阵的乘法方法:
    //注:矩阵乘法: 3x2 2x3  第一个矩阵的列是 第二个矩阵的行 ,要求相等才能相乘
    public Matrix MatrixCF(Matrix m){
        if (this.column!=m.row){  //判断是否满足矩阵乘法的条件
            System.out.println("第一个矩阵的列不等于第二个矩阵的行,不能进行相乘");
            return null;
        }

        Matrix m2=new Matrix(); // new 一个返回的对象
        m2.row=this.row;  //返回对象的行就是第一个调用该方法矩阵对象的行
        m2.column=m.column; //返回对象的列就是参数矩阵对象的列
        m2.A=new int[m2.row][m2.column]; // 返回对象的矩阵需要new 对象才能进行元素赋值
        for (int i=0;i<this.row;i++){  // 调用矩阵的行
            for (int j=0;j<m.column;j++){   //参数对象的列
                for (int k=0;k<m.row;k++){  //参数对象的行
                    m2.A[i][k]+=this.A[i][k]*m.A[k][i]; //调用方法对象this.A[i][k]:表达的是 调用方法的第 某行的第几个元素
                                                                // A[k][j] 乘以该矩阵的第一列的所有元素相加
                }
            }

        }
        return m2;
    }

5.定义矩阵的转置

思路:(1.行元素变成列元素,列元素变行元素)

 // 矩阵转至
    public void ZhuanZ(){

        for (int i=0;i<this.row;i++)
            for (int j=i;j<this.column;j++){
                int temp=A[i][j];
                A[i][j]=A[j][i];
                A[j][i]=temp;
            }
    }

6.定义矩阵输出方法

(思路:简单的遍历数组换行输出)

//定义输出矩阵的方法
    public void ptMatrix(){
        for (int i=0;i<this.row;i++){
            for (int j=0;j<this.column;j++)
                System.out.print(this.A[i][j]+"  ");
            System.out.println();//输出一行换行
        }
    }

定义矩阵类(Matrix)完整代码:

import java.util.Scanner;

//定义矩阵类
 public class Matrix{
    int row;
    int column;
    int [][]A; //定义一个二维数组用于存放矩阵的元素

    //无参构造
    public Matrix() {
    }

    //有参构造
    public Matrix(int h,int l){
        row=h;
        column=l;
        A=new int[h][l]; // 对数组进行new对象,数组对象初始化的时候必须要有对象不能为null
    }

    //定义初始化矩阵方法
    public void AssigmentMatrix(){
        Scanner scanner=new Scanner(System.in);
        int sum=this.row*this.column; //矩阵的总元素等于row X column
        System.out.println("您的矩阵为:"+this.row+"行"+this.column+"列的矩阵,请按第一行顺序输入"+sum+"个元素");
        // for循环遍历输入每一个元素
        for (int i=0;i<this.row;i++){
            System.out.println("请输入第"+(i+1)+"行"+"的"+column+"个元素");
            for (int j=0;j<this.column;j++)
                this.A[i][j]=scanner.nextInt();  // 为每个元素输入值
        }
    }

    //定义矩阵相加的方法
    public Matrix MatrixJF(Matrix m){
        if (this.row!=m.row||this.column!=m.column){  // 先判断是否满足矩阵的加法
            System.out.println("两矩阵行列不相等不能相加");
            return null;
        }

        Matrix matrix=new Matrix(); // 定义一个返回的对象
        matrix.row=this.row; //行列赋值
        matrix.column=this.column;
        matrix.A=new int[row][column]; //成员变量数组A也要进行new 对象 ,不然会出现null 异常
        for (int i=0;i<this.row;i++){  // 对应元素相加赋值给要返回对象的元素
            for (int j=0;j<this.column;j++){
                matrix.A[i][j]=this.A[i][j]+m.A[i][j];
            }
        }
        return matrix; //返回矩阵对象
    }

    //定义矩阵的乘法方法:
    //注:矩阵乘法: 3x2 2x3  第一个矩阵的列是 第二个矩阵的行 ,要求相等才能相乘
    public Matrix MatrixCF(Matrix m){
        if (this.column!=m.row){  //判断是否满足矩阵乘法的条件
            System.out.println("第一个矩阵的列不等于第二个矩阵的行,不能进行相乘");
            return null;
        }

        Matrix m2=new Matrix(); // new 一个返回的对象
        m2.row=this.row;  //返回对象的行就是第一个调用该方法矩阵对象的行
        m2.column=m.column; //返回对象的列就是参数矩阵对象的列
        m2.A=new int[m2.row][m2.column]; // 返回对象的矩阵需要new 对象才能进行元素赋值
        for (int i=0;i<this.row;i++){  // 调用矩阵的行
            for (int j=0;j<m.column;j++){   //参数对象的列
                for (int k=0;k<m.row;k++){  //参数对象的行
                    m2.A[i][k]+=this.A[i][k]*m.A[k][i]; //调用方法对象this.A[i][k]:表达的是 调用方法的第 某行的第几个元素
                                                                // A[k][j] 乘以该矩阵的第一列的所有元素相加
                }
            }

        }
        return m2;
    }

    // 矩阵转至
    public void ZhuanZ(){

        for (int i=0;i<this.row;i++)
            for (int j=i;j<this.column;j++){
                int temp=A[i][j];
                A[i][j]=A[j][i];
                A[j][i]=temp;
            }
    }


    //定义输出矩阵的方法
    public void ptMatrix(){
        for (int i=0;i<this.row;i++){
            for (int j=0;j<this.column;j++)
                System.out.print(this.A[i][j]+"  ");
            System.out.println();//输出一行换行
        }
    }
}

测试类代码:

1.(不包含转至的测试类)

import java.util.Scanner;

public class TestMatrix {
    //main方法实践人
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int h1,l1;
        System.out.print("请输入第一个矩阵的row和column:");
        h1=scanner.nextInt();
        l1=scanner.nextInt();
        Matrix m1 =new Matrix(h1,l1);
        System.out.println("为第一个矩阵赋值");
        m1.AssigmentMatrix(); //为第一个矩阵赋值
        System.out.println("第一个矩阵如下:");
        m1.ptMatrix();

        int h2,l2;
        System.out.print("请输入第二个矩阵的row和column:");
        h2=scanner.nextInt();
        l2=scanner.nextInt();
        System.out.println("为第二个矩阵赋值");
        Matrix m2 =new Matrix(h2,l2);
        m2.AssigmentMatrix();// 为第二个矩阵赋值
        System.out.println("第二个矩阵如下:");
        m2.ptMatrix();

        Matrix m3 =m1.MatrixJF(m2); //矩阵 m1 + m2 返回矩阵赋予 m3
        System.out.println("相加后的矩阵为:");
        if (m3!=null)
        m3.ptMatrix(); // 输出矩阵

        Matrix m4 =new Matrix();
        m4 =m1.MatrixCF(m2);// 矩阵乘法
        if (m4!=null){
            System.out.println("m1xm2矩阵的乘法结果如下:");
            m4.ptMatrix(); // 输出矩阵乘法后的对象
        }

    }
}

结果如下图:
输入第一个矩阵在这里插入图片描述
输入第二个矩阵:
在这里插入图片描述
调用乘法,加法结果:
在这里插入图片描述

矩阵转置单独测试类

public class TestMatrix02 {
    public static void main(String[] args) {
        Matrix matrix2=new Matrix(3,3);
        matrix2.AssigmentMatrix();
        matrix2.ptMatrix();
        matrix2.ZhuanZ();
        System.out.println("转至之后");
        matrix2.ptMatrix();
    }

}

结果如下:在这里插入图片描述

自我总结:

1.分析类所具有的属性,以及属性,的用处,根据题目要求分别实现各个功能方法即可
(制作不易,希望大家一键三连支持一下,我会持续更新多的新内容,一起与大家学习,让我们加油敲代,总会有所收获的!!!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值