java基础:19.2 泛型举例,矩阵的运算
发布日期:2022-04-04 06:36:31 浏览次数:3 分类:博客文章

本文共 3225 字,大约阅读时间需要 10 分钟。

首先创建一个泛型类,<E extends Number> 表示该泛型类型是Number的子类型。
接下来,申明3个抽象方法,因为不知道元素的确切类型前不能实现它。
后面写的所有方法都是非静态的,因为我们使用的是泛型类型E来表示类。

public abstract class GenericMatrix 
   
    {  //矩阵元素的类型是Number 的泛型子类
    
protected abstract E add(E o1, E o2);
protected abstract E multiply(E o1, E o2); 
protected abstract E zero();
//零矩阵
//矩阵的加法运算、乘法运算、结果显示
public E[][] addMatrix(E[][] matrix1, E[][] matrix2) { 
//将两个矩阵相加,用泛型E来表示类,所以方法是非静态的;
if (  (matrix1.length != matrix2.length) || (matrix1[0].length != matrix2[0].length)  )
throw new RuntimeException("The matrices do not have the same size!");
   E[][] result = (E[][]) new Number[matrix1.length][matrix1[0].length];   //注意E[][] result = new Number[matrix.length][matrix1[0].length]是不对的,
//因为不能用泛型类型来创建数组,要用(E[][])来转换才能创建数组;
for(int i = 0 ;i < result.length; i++)
for (int j = 0; j 
result [i][j] = add(matrix1[i][j],matrix2[i][j]);
}
return result;
}
//multiply
 public E[][] multiplyMatrix(E[][] matrix1, E[][] matrix2) {
if (matrix1[0].length != matrix2.length)
throw new RuntimeException("The matrices do not have compatible size!");
   E[][] result = (E[][]) new Number[matrix1.length][matrix2[0].length];
 for(int i = 0 ;i < result.length; i++) {
for (int j = 0; j 
result [i][j] = zero();
for(int k= 0 ;k < matrix1[0].length; k++) {
result[i][j] = add(result[i][j],multiply(matrix1[i][k],matrix2[k][j]));
}
}
}
return result;
}
public static void printResult(Number[][] m1 ,Number[][] m2, Number[][] m3, char op) {
for(int i = 0; i
for ( int j = 0; j < m1[0].length; j++)
System.out.print("  " + m1[i][j]);
if (i == m1.length / 2)
System.out.print("  " + op + "  ");
else
 
System.out.print("
 ");
for(int j = 0; j < m2.length; j++)
System.out.print("  " + m2[i][j]);
if (i == m1.length / 2)
System.out.print("  =   ");
else
 
System.out.print("
  ");
for(int j = 0; j < m3.length; j++)
System.out.print(m3[i][j] + "   ");
System.out.println();
 
  
}
}
   }

 
接下来是对GenericMatrix的Integer示例的部分函数重载
该程序实现了Integer 对象的add 、multiply 和zero 方法。因为这些方法只能被addMatrix 和multiplyMatrix 方法调用,所以,它们仍然是protected 的。

public class IntegerMatrix extends GenericMatrix
   
    {
    
@Override
protected Integer add(Integer o1,Integer o2) {
return o1 + o2;
}
@Override
protected Integer multiply(Integer o1,Integer o2) {
return o1 * o2;
}
@Override
protected Integer zero() {
return 0;
}}

 
main函数

public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer[][] m1 = new Integer[][] {{1,2,3},{4,5,6},{1,1,1}};
Integer[][] m2 = new Integer[][] {{1,1,1},{2,2,2},{0,0,0}};
IntegerMatrix integerMatrix = new IntegerMatrix();
System.out.println("\n m1 + m2 is ");
GenericMatrix.printResult(m1, m2, integerMatrix.addMatrix(m1, m2), '+');
System.out.println("\n m1 * m2 is ");
GenericMatrix.printResult(m1, m2, integerMatrix.multiplyMatrix(m1, m2), '*');
}}

显示结果

转载地址:https://www.cnblogs.com/l20902/p/10610895.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Markdown 常用语法
下一篇:java基础:19.1 泛型

发表评论

最新留言

很好
[***.249.79.50]2022年05月22日 10时25分33秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

interrupt java_关于java中的interrupt 2019-12-01 15:24:37
什么是java环境变量_什么是java环境变量 2019-12-01 15:24:38
chttpconnection 系统找不到指定文件_Win7系统安装MySQL之后找不到指定文件与服务如何解决?... 2019-12-01 15:24:35
ad湿度传感器的流程图_「雕爷学编程」Arduino动手做(08)——湿度传感器模块... 2019-12-01 15:24:35
vue前端_8.1 SRE 要懂点前端vue 2019-12-01 15:24:35
linux系统mysql入侵_Linux高级入侵检测-文件系统完整性 2019-12-01 15:24:35
mysql 唯一索引出现重复数据_mysql使用唯一索引避免插入重复数据 2019-12-01 15:24:35
mysql实现评论盖楼的sql_mysql - 网易的评论盖楼设计,用php的话,应该怎样实现?怎样存入数据库?... 2019-12-01 15:24:36
java多线程生产者消费者问题_java多线程解决生产者消费者问题 2019-12-01 15:24:36
c 批量更新mysql数据库_MySql批量更新方式大全 2019-12-01 15:24:33
autowarid和resources_ÂÐÏØÈË´ó 2019-12-01 15:24:33
python函数的定义教程_Python函数定义、函数调用详解 2019-12-01 15:24:33
python合并相同索引列表_python – 按行和相同的索引pandas合并两个数据帧 2019-12-01 15:24:33
ssis抽MySQL数据_微软SSIS部署抽取数据的包报错 2019-12-01 15:24:34
whmcs 添加域名_WHMCS域名更换教程 2019-12-01 15:24:34
vue监听值有变化后调用接口_探索 Vue.js 响应式原理 2019-12-01 15:24:34
mysql数据库环境安装配置_windows环境安装配置MySQL数据库 2019-12-01 15:24:34
mysql 索引缓存_MySQL之变量、查询缓存和索引 2019-12-01 15:24:31
mysql建表规定年龄范围_MySQL建表规则 2019-12-01 15:24:32
mysql memcache 一键_NGINX + PHP + MySQL + Memcache 一键启动脚本(.bat + shell) 2019-12-01 15:24:32