当前位置: 首页 > ds >正文

【日撸 Java 三百行】Day 7(Java的数组与矩阵元素相加)

目录

Day 7:Java 的数组与矩阵元素相加

 一、基本知识

 二、矩阵的建立与基本计算

三、代码及测试

拓展:Arrays类详解

小结


Day 7:Java 的数组与矩阵元素相加

Task:

  • 矩阵的赋值.
  • 二重循环.

 一、基本知识

        在学习 Java 中的数组与矩阵前,我们需要以下两个基本知识:

  • 动态创建
  • Arrays 类

        这部分的知识点请参考相关的 Java 专题补充:
        

 二、矩阵的建立与基本计算

        本博客中,将用代码实现两种基本的矩阵计算:全元素求和,基本加法

1. 矩阵元素总和

        同样的,我们依旧把这个功能封装为单独的函数

	/************************ Sum the elements of a matrix.* * @param paraMatrix The given matrix.* @return The sum of all its elements.**********************/public static int matrixElementSum(int[][] paraMatrix) {int resultSum = 0;for (int i = 0; i < paraMatrix.length; i++) {for (int j = 0; j < paraMatrix[0].length; j++) {resultSum += paraMatrix[i][j];} // Of for j} // Of for ireturn resultSum;}// Of matrixElementSum

        代码不多做解释,通过双层 for 循环即能遍历矩阵中的所有元素。唯一值得注意的是,我们该如何去理解通过数组组成的矩阵?
        首先矩阵的高其实就是矩阵的一维部分,一个矩阵在计算机中可以看做是“一维数列”的数组,把这个数组的元素纵向放置就构成了我们视觉可见的一个“矩形”的数字阵列。而这个“一维数列”的数组的长度自然就是这个阵列的纵向长度,也就是高,是把这个数组的元素纵向放置可以排的行数。因此:

paraMatrix.length

        就是矩阵的宽,或者说行数。
        同理,“一维数列”的数组中的每个元素都是一个一维数列,每个数列的长度就构成了矩阵的长,或者说列数。实际代码中,我们取出“一维数列”的数组的第一个元素,也就是矩阵的第一行,并求这一个行的长度即可:

paraMatrix[0].length

        具体遍历的话,基本所有语言的二维存储都是采用行优先的存储,而普遍的遍历都是先行后列的遍历思想,因此这一点不再赘述。

2. 矩阵相加

        一个优秀的程序是需要有自我报错能力的,比如这里的非法矩阵相加。
        矩阵相加的话需要符合线性代数中矩阵计算的一个基本要求——即相加的双方矩阵必须是同型的。因此注意对于非法情况的判断。

	/************************ Add two matrices. Attention: No error check is provided at this moment.* * @param paraMatrix1 The first matirx.* @param paraMatrix2 The second matrix. It should have the same size as the*                    first one's* @return The addition of these matrices.**********************/public static int[][] matrixAddition(int[][] paraMatrix1, int[][] paraMatrix2) {if(paraMatrix1.length!=paraMatrix2.length || paraMatrix1[0].length!=paraMatrix2[0].length) {System.out.println("Error! Two matrixs must have same height and width! ");}int[][] resultMatrix = new int[paraMatrix1.length][paraMatrix1[0].length];for (int i = 0; i < paraMatrix1.length; i++) {for (int j = 0; j < paraMatrix1[0].length; j++) {resultMatrix[i][j] = paraMatrix1[i][j] + paraMatrix2[i][j];} // Of for j} // Of for ireturn resultMatrix;}// Of matroxAddition

三、代码及测试

package basic;import java.util.Arrays;/*** This is the seventh code. Names and comments should follow my style strictly.** @author: Changyang Hu joe03@foxmail.com* @date created: 2025-05-09*/
public class MatrixAddition {/************************* @Title: main* @Description: The entrance of the program.** @param args Not used now.* @return void************************/public static void main(String args[]) {matrixElementSumTest();matrixAdditionTest();}// Of main/************************* * @Title: matrixElementSun* @Description: Sum the elements of a matrix** @param paraMatrix The given matrix* @return * @return int************************/public static int matrixElementSum(int[][] paraMatrix) {int resultSum = 0;for (int i = 0; i < paraMatrix.length; i++) {for (int j = 0; j < paraMatrix[0].length; j++) {resultSum += paraMatrix[i][j];} // Of for j} // Of for ireturn resultSum;}// Of matrixElementSum/*** ********************** @Title: matrixElementSumTest* @Description: Unit test for respective method.* * @return void **********************/public static void matrixElementSumTest() {int[][] tempMatrix = new int[3][4];for (int i = 0; i < tempMatrix.length; i++) {for (int j = 0; j < tempMatrix[0].length; j++) {tempMatrix[i][j] = i * 10 + j;} // Of for j} // Of for iSystem.out.println("The matrix is: \r\n" + Arrays.deepToString(tempMatrix));System.out.println("The matrix element sum is: " + matrixElementSum(tempMatrix) + "\r\n");}// Of matrixElementSumTest/*** ********************** @Title: matrixAddition* @Description: Add two matrices. Attention: NO error check is provided at this moment.** @param paraMatrix1	The first matrix.* @param paraMatrix2	The second matrix. It should have the same size as*                    	the first one's.* @return The addition of these matrices.* @return int[][] **********************/public static int[][] matrixAddition(int[][] paraMatrix1, int[][] paraMatrix2) {int[][] resultMatrix = new int[paraMatrix1.length][paraMatrix1[0].length];for (int i = 0; i < paraMatrix1.length; i++) {for (int j = 0; j < paraMatrix1[0].length; j++) {resultMatrix[i][j] = paraMatrix1[i][j] + paraMatrix2[i][j];} // Of for j} // Of for ireturn resultMatrix;}// Of matrixAdditon/*** ********************** @Title: matrixAdditionTest* @Description: Unit test for respective method.* * @return void **********************/public static void matrixAdditionTest() {int[][] tempMatrix = new int[3][4];for (int i = 0; i < tempMatrix.length; i++) {for (int j = 0; j < tempMatrix[0].length; j++) {tempMatrix[i][j] = i * 10 + j;} // Of for j} // Of for iSystem.out.println("The matrix is; \r\n" + Arrays.deepToString(tempMatrix));int[][] tempNewMatrix = matrixAddition(tempMatrix, tempMatrix);System.out.println("The new matrix is: \r\n" + Arrays.deepToString(tempNewMatrix));}// Of matrixAdditionTest}// Of class MatricAddtion

运行结果如下:

拓展:Arrays类详解

【Java 专题补充】Arrays类详解-CSDN博客


小结

        java提供了许多的库,而这些库方法能对一些基本的操作进行优化。本篇的矩阵相加并不是很难的一部分,但是却暗示了不同语言的实现思路,不同语言对于数组的声明以及遍历的策略。
        另外本文提到的矩阵也是一种非常重要的数据结构,虽然许多语言对于矩阵实现封装库信息很有限(除开matlab这种从矩阵角度出发的编程语言),但是其包含的算法却仍然非常丰富。在 C,C++,java,python 中都有对应的用于处理矩阵数据的库,这些能为我们提供极大的便捷。因此基于基础的二维数组数据模拟复杂的矩阵算法能极大锻炼我们的代码思维与对矩阵之中包含的数学逻辑的理解。但需要注意的是,在使用这些现成的函数时,要有意识的去理解背后的原理,否则只会成为空有其表的调包侠。
        同时,对于图像的颜色,在计算机中我们常用0-255的数值来表示。所以,一张图像实际上就是一个二维矩阵。这个基础使得矩阵在计算机视觉中的应用中也扮演着关键作用,其中延伸出来的图像处理算法也在继续为后世服务。

http://www.xdnf.cn/news/5073.html

相关文章:

  • 计算机视觉——MedSAM2医学影像一键实现3D与视频分割的高效解决方案
  • 数图闪耀2025深圳CCFA中国零售博览会:AI+零售数字化解决方案引发现场热潮
  • 【2025最新】gitee+pycharm完成项目的上传与管理
  • “ES7+ React/Redux/React-Native snippets“常用快捷前缀
  • Vue 生命周期详解
  • com.fasterxml.jackson.dataformat.xml.XmlMapper把对象转换xml格式,属性放到标签<>里边
  • 部署Superset BI(四)连接sql server数据库
  • CNG汽车加气站操作工岗位职责
  • 2025医疗信息化趋势:健康管理系统如何重构智慧医院生态
  • 李沐《动手学深度学习》 | 多层感知机
  • WEB前端表单及表格标签综合案例
  • World of Warcraft [CLASSIC][80][Deluyia] [Fragment of Val‘anyr]
  • Dify智能体平台源码二次开发笔记(8)- OpenAvatarChat数字人项目+dify智能体完美融合
  • 升级 Azure Kubernetes 服务群集的关键注意事项
  • Spring Cloud LoadBalancer (负载均衡)
  • Kubernetes生产实战:NodePort端口范围的隐藏规则与调优指南
  • C——数组和函数实践:扫雷
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】电商数据分析案例-9.4 可视化报告输出
  • 两台服务器之前共享文件夹
  • 第十五章,SSL VPN
  • 一文了解氨基酸的分类、代谢和应用
  • Spring Web MVC基础理论和使用
  • Missashe考研日记-day36(改版说明)
  • AWS之数据分析类产品
  • 算法与数据结构 - 二叉树结构入门
  • git高效杀器——cz-customizable 搭配 commitlint
  • SAF利用由Varjo和AFormX开发的VR/XR模拟器推动作战训练
  • 【2025最新】如何定制化、高效化使用LIghtRAG进行规范知识抽取
  • STM32TIM定时中断(6)
  • 聊聊Spring AI autoconfigure模块的拆分