日撸 Java 三百行day31

news2025/2/27 23:05:36

文章目录

  • day31 整数矩阵及其运算
    • 面向对象思想
    • java异常处理
    • java中的getter和setter方法
    • 代码

day31 整数矩阵及其运算

面向对象思想

结合之前day7和day8面向过程开发,只关注了矩阵加法和矩阵乘法的功能。而day31是面向对象开发,一个矩阵类,在这个类对象中包含有矩阵的加法,乘法,获取数据等功能(如add,multiply方法)。同时通过get,set方法来让用户通过方法获取类相关数据(getData,getRows,getColumns,setValue等),而非直接获取数据。在IntMatrix类,方法名为add的有两个,但这两个方法的区别在于传参以及返回不同,这体现了方法重载。
面向对象的三大特点(定义的描述来自百度):

  • 封装:
    (1)定义:将数据和对数据的操作封装在一个对象内部,对外部隐藏对象的实现细节,保证了程序的安全性和可靠性。
    (2)IntMatrix类就体现了封装性,将数据和相关的操作封装在对象内部,我们对外只提供相应饿方法,如我们调用矩阵相乘就可以直接调用multiply方法即可
  • 继承
    (1)定义:通过定义父类和子类,子类可以继承父类的属性和方法,减少代码重复,提高代码的可维护性
  • 多态
    (1)定义:同一个方法可以根据不同的对象调用不同的实现方式,从而提高代码的灵活性和可扩展性。多态一般是通过继承或接口来实现的

java异常处理

在之前写哈夫曼树时已经涉及异常处理了,java的异常处理方法

  • try-catch-finally: 将可能要出现异常的代码放入try中,catch 捕获 try 中的异常,并处理,不管有没有异常,finally中的代码都会执行。(finally不是必须)

  • throw: 一般是语句抛出一个异常, 一般是手动抛出,并且可以抛出更为明确的异常

  • throws:一般是方法抛出一个异常,在方法后面声明异常(表示该方法可能会产生异常)

java中的getter和setter方法

一般在创建java实体类时,会把类相关属性设置为私有private(这是从安全角度去考虑),想要获取或设置这些私有属性可以通过方法去获取或设置,即getXXX,setXXX,而不是直接去操作这一个变量。这也体现了java的一大特点:封装性。
访问权限修饰符(private,procted,public,default)不同的访问权限,访问的范围不一样(从网上找了一个这样的图)
在这里插入图片描述
在项目中使用lombok可以减少写getter/setter/toString等方法的编写

代码

package matrix;
import java.util.Arrays;
public class IntMatrix {
    int[][] data;

    /**
     * The first constructor.
     * @param paraRows The number of rows
     * @param paraColumns  The number of columns
     */
    public IntMatrix(int paraRows, int paraColumns){
        data = new int[paraRows][paraColumns];
    }

    /**
     * The second constructor. Construct a copy of the given matrix.
     * @param paraMatrix The given matrix.
     */
    public IntMatrix(int[][] paraMatrix){
        data = new int[paraMatrix.length][paraMatrix[0].length];
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[0].length; j++) {
                data[i][j] = paraMatrix[i][j];
            }
        }
    }

    /**
     * The third constructor. Construct a copy of the given matrix.
     * @param paraMatrix The given matrix.
     */
    public IntMatrix(IntMatrix paraMatrix) {
        this(paraMatrix.getData());
    }

    /**
     * Get identity matrix. The values at the diagonal are all 1
     * @param paraRows
     * @return
     */
    public static IntMatrix getIdentityMatrix(int paraRows) {
        IntMatrix resultMatrix = new IntMatrix(paraRows, paraRows);
        for (int i = 0; i < paraRows; i++) {
            // According to access control, resultMatrix.data can be visited
            resultMatrix.data[i][i] = 1;
        }
        return resultMatrix;
    }

    /**
     * Overrides the method claimed in Object, the superclass of any class.
     * @return
     */
    @Override
    public String toString() {
        return Arrays.deepToString(data);
    }

    /**
     * Get my data. Warning, the reference to the data instead of a copy of the data is returned.
     * @return
     */
    public int[][] getData() {
        return data;
    }

    public int getRows() {
        return data.length;
    }

    public int getColumns() {
        return data[0].length;
    }

    /**
     * Set one the value of one element.
     * @param paraRow  The row of the element.
     * @param paraColumn The column of the element.
     * @param paraValue  The new value.
     */
    public void setValue(int paraRow, int paraColumn, int paraValue){
        data[paraRow][paraColumn] = paraValue;
    }

    /**
     * Get the value of one element.
     * @param paraRow The row of the element.
     * @param paraColumn The column of the element.
     * @return
     */
    public int getValue(int paraRow, int paraColumn) {
        return data[paraRow][paraColumn];
    }

    /**
     * Add another matrix to me.
     * @param paraMatrix  The other matrix.
     * @throws Exception
     */
    public void add(IntMatrix paraMatrix) throws Exception {
        // Step 1. Get the data of the given matrix.
        int[][] tempData = paraMatrix.getData();

        // Step 2. Size check.
        if (data.length != tempData.length) {
            throw new Exception("Cannot add matrices. Rows not match: " + data.length + " vs. "
                    + tempData.length + ".");
        }
        if (data[0].length != tempData[0].length) {
            throw new Exception("Cannot add matrices. Rows not match: " + data[0].length + " vs. "
                    + tempData[0].length + ".");
        }

        // Step 3. Add to me.
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[0].length; j++) {
                data[i][j] += tempData[i][j];
            }
        }
    }

    /**
     * Add two existing matrices.
     * @param paraMatrix1 The first matrix.
     * @param paraMatrix2 The second matrix.
     * @return A new matrix.
     * @throws Exception
     */
    public static IntMatrix add(IntMatrix paraMatrix1, IntMatrix paraMatrix2) throws Exception {
        // Step 1. Clone the first matrix.
        IntMatrix resultMatrix = new IntMatrix(paraMatrix1);

        // Step 2. Add the second one.
        resultMatrix.add(paraMatrix2);

        return resultMatrix;
    }


    /**
     * Multiply two existing matrices.
     * @param paraMatrix1 The first matrix.
     * @param paraMatrix2 The second matrix.
     * @return A new matrix.
     * @throws Exception
     */
    public static IntMatrix multiply(IntMatrix paraMatrix1, IntMatrix paraMatrix2) throws Exception {
        // Step 1. Check size.
        int[][] tempData1 = paraMatrix1.getData();
        int[][] tempData2 = paraMatrix2.getData();
        if (tempData1[0].length != tempData2.length) {
            throw new Exception("Cannot multiply matrices: " + tempData1[0].length + " vs. "
                    + tempData2.length + ".");
        }

        // Step 2. Allocate space.
        int[][] resultData = new int[tempData1.length][tempData2[0].length];

        // Step 3. Multiply.
        for (int i = 0; i < tempData1.length; i++) {
            for (int j = 0; j < tempData2[0].length; j++) {
                for (int k = 0; k < tempData1[0].length; k++) {
                    resultData[i][j] += tempData1[i][k] * tempData2[k][j];
                }
            }
        }

        // Step 4. Construct the matrix object.
        IntMatrix resultMatrix = new IntMatrix(resultData);

        return resultMatrix;
    }

    public static void main(String args[]) {
        IntMatrix tempMatrix1 = new IntMatrix(3, 3);
        tempMatrix1.setValue(0, 1, 1);
        tempMatrix1.setValue(1, 0, 1);
        tempMatrix1.setValue(1, 2, 1);
        tempMatrix1.setValue(2, 1, 1);
        System.out.println("The original matrix is: " + tempMatrix1);

        IntMatrix tempMatrix2 = null;
        try {
            tempMatrix2 = IntMatrix.multiply(tempMatrix1, tempMatrix1);
        } catch (Exception ee) {
            System.out.println(ee);
        }
        System.out.println("The square matrix is: " + tempMatrix2);

        IntMatrix tempMatrix3 = new IntMatrix(tempMatrix2);
        try {
            tempMatrix3.add(tempMatrix1);
        } catch (Exception ee) {
            System.out.println(ee);
        }
        System.out.println("The connectivity matrix is: " + tempMatrix3);
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/426749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python实现驾考自动答题,隔壁老王每次都100分....

人生苦短&#xff0c;我用python 不知道大家都考完驾照没&#xff1f; 这个驾照不管大家有没有&#xff0c;我相信大家都是这个&#xff1a; 朋友最近在考驾照&#xff0c;快考科一了… 我微微一笑当场给他整个活~ 用Python整了几十行代码&#xff0c;给朋友实现一下自动答…

前端面试题 - 基础(HTML、HTTP、WEB)

文章目录1、前端 SEO 需要注意哪些2、img 标签上的 title 和 alt 区别3、浏览器输入 url 到显示过程4、浏览器渲染过程5、常见请求方式6、常见的状态码7、网站性能优化8、语义化理解9、浏览器内核理解10、H5的新特性11、离线存储使用&#xff0c;工作原理12、浏览器是如何管理和…

确保实时操作系统(RTOS)设备中的数据安全

导读1月28日大家庆祝了数据保护日&#xff0c;这是一项旨在促进保护数据隐私和安全的国际活动。为了提高人们对数据保护的意识&#xff0c;讨论实时操作系统中数据安全的问题势在必行。目前非常规操作系统已被广泛使用&#xff0c;所以了解这一系统非常重要&#xff0c;尤其是涉…

做完自动化测试,但别让不会汇报毁了你...

pytest 是一个成熟的全功能Python测试工具&#xff0c;可以帮助您编写更好的程序。它与 python 自带的 unittest 测试框架类似&#xff0c;但 pytest 使用起来更简洁和高效&#xff0c;并且兼容 unittest 框架。pytest 能够支持简单的单元测试和复杂的功能测试&#xff0c;pyte…

Javassist动态生成类使用,以及Arthas 查看动态代理生成类内容

java反射 反射的弊端: 性能开销: 因为反射涉及到动态解析的类型&#xff0c;所以某些Java虚拟机的优化不能被执行(因为它不能真正了解你在做什么)。因此&#xff0c;反射操作的性能比非反射操作的性能要慢&#xff0c;应该避免在对性能敏感的应用程序中频繁调用的代码部分。 …

C++记录总结及面试常见问题

C记录总结及面试常见问题指针和函数内存分区模型访问权限struct & class创建类构造函数静态成员this指针const 修饰成员函数友元friend重载运算符和重载函数继承读文件ifstream/fstreamvector中resize和reserve的区别智能指针左值与右值struct、class区别引用指针和函数 函…

Zabbix6.0升级到Zabbix6.4

1&#xff1a;现在的版本是6.0.3 2&#xff1a;停止Zabbix Server进程。 systemctl stop zabbix-server 若升级Zabbix proxy版本&#xff0c;需也停止Zabbix proxy服务 。 systemctl stop zabbix-proxy 3&#xff1a;我用的是MariaDB数据库名称是zabbix。 4&#xff1a; 查看…

windows11安装pytorch2.0

换了新电脑&#xff0c;好久没用windows了&#xff0c;配置一下环境&#xff0c;顺便记录一下方便帮助AI小白不会浪费时间在装环境上&#xff08;一星期不夸张hah&#xff09; 打开命令行&#xff0c;然后输入 nvidia-smi&#xff0c;检查自己的显卡驱动 也可以通过图形界面查…

Python轻量级Web框架Flask(6)——Flask中的单表操作(增删改“查”)

0、前言&#xff1a;Python轻量级Web框架Flask&#xff08;5&#xff09;中生成的新模板就是包含数据库操作的Flask模板。 在pycharm中用flask写表结构时需用用到数据类型的定义如下&#xff1a; 下面总结一些常用到的数据类型&#xff1a; 1、Python轻量级Web框架Flask&…

传智健康项目总结

耗时一个半月终于把传智健康项目跟着做完了&#xff0c;下面是对项目的一点心得体会。 项目知识点总结 Maven中parent父工程聚合 聚合模块(父工程)作用&#xff1a;父工程是一个pom工程&#xff0c;通常只是用来帮助其子模块构建的工具&#xff0c;本身并没有实质的内容。具体…

【Pytorch】搭建网络模型的实战

【Pytorch】搭建网络模型的实战CIFAR10 model structure搭建网络使用Sequential进行搭建网络模型使用tensorboard查看网络结构对CIFAR10数据集进行分类&#xff0c;根据图片内容识别这是哪一类 CIFAR10 model structure 输入input:3通道的32 x 32 图片卷积操作的通道数不变 那…

C#,码海拾贝(16)——求“矩阵秩”的全选主元“高斯消去法(Gauss Elimination)”C#源代码,《C#数值计算算法编程》源代码升级改进版

1 矩阵的秩 Rank of Matrix 矩阵的秩是线性代数中的一个概念。在线性代数中&#xff0c;一个矩阵A的列秩是A的线性独立的纵列的极大数&#xff0c;通常表示为r(A)&#xff0c;rk(A)或rank A。 在线性代数中&#xff0c;一个矩阵A的列秩是A的线性独立的纵列的极大数目。类似地&…

全面解析反欺诈(羊毛盾)API,助你识别各类欺诈风险

前言 反欺诈&#xff08;羊毛盾&#xff09;反机器欺诈 API&#xff0c;是一种基于大数据分析和模型产品的技术&#xff0c;通过输入手机号、手机 IP 地址进行检测&#xff0c;帮助客户识别大量存在恶意的账号。 反欺诈&#xff08;羊毛盾&#xff09;API 的作用 反欺诈&…

Spring自定义参数解析器~

1. 什么是参数解析器 RequstBody、RequstParam 这些注解是不是很熟悉&#xff1f; 我们在开发 Controller 接口时经常会用到此类参数注解&#xff0c;那这些注解的作用是什么&#xff1f;我们真的了解吗&#xff1f; 简单来说&#xff0c;这些注解就是帮我们将前端传递的参数…

基于Sikuli GUI图像识别框架的PC客户端自动化测试实践

目录&#xff1a;导读 引言 一、GUI图像识别框架元祖&#xff1a;Sikuli 二、Sikuli运行原理 三、Sikuli安装 四、Sikuli IDE主界面基本使用 五、Sikuli 脚本语法 六、Sikuli 应用示例 七、Sikuli 优势及局限 1.优势 2.局限 Sikuli 使用小结 引言 Sikuli是一种基于…

【Hello Network】网络基础1

作者&#xff1a;小萌新 专栏&#xff1a;网络 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客简介&#xff1a;简单介绍网络的基础概念 网络基础1网络基础网络的起源网络在哪里认识协议网络协议协议分层OSI七层模型TCP/IP协议网络传输流程局域网的两台主机通信两…

跟姥爷深度学习3 神经网络的调试实操

一、前言 前面我们做了一次天气预测的模型&#xff0c;训练的结果都还好&#xff0c;网络好歹是“拟合”了&#xff0c;但预测数据不合预期让我一直耿耿于怀。所以我又花了很长时间来研究为什么&#xff0c;我的理论依据明明没有问题&#xff08;今日*均温度与*一周*均温度具有…

全球6G技术大会总结报告

全球6G技术大会 论坛B&#xff1a;天地融合智能组网技术 论坛D&#xff1a;2030技术发展趋势 论坛E&#xff1a;6G无线空口传输技术 论坛F&#xff1a;6G通感算架构及关键技术 论坛H&#xff1a;6G网络架构及关键技术 论坛B&#xff1a;天地融合智能组网技术 论坛B中包含…

【Java 并发编程】一文了解线程间有哪些通信方式?

一文了解线程间有哪些通信方式&#xff1f;1. synchronized 内置锁2. volatile 关键字3. 等待/通知机制3.1 等待wait()wait(long)wait(long, int)等待方需遵循如下原则3.2 通知notify()notifyAll()通知方需遵循如下原则notify() 和 notifyAll() 应该用谁&#xff1f;4. 管道输入…

第18章_JDK8-17新特性(下)

第18章_JDK8-17新特性&#xff08;下&#xff09; 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 6. 新语法结构 新的语法结构&#xff0c;为我们勾勒出了 Java 语法进化的一个趋势&#xff0c…