📄 plus_spar.java
字号:
/* 用三元组表的方式实现两个矩阵的加法运算
*/
public class plus_spar
{
//已知的两个矩阵A和B
public int A[][];
public int B[][];
public void plus()
{
//入口判断,若A和B不同形,则不能进行加法运算
if (A.length!=B.length)
{ System.out.println("两个矩阵不同形,不能相加!");
}
else
{
//将矩阵A用三元组表表示
System.out.println("矩阵A: ");
Sparse1 a=new Sparse1(A);
//将矩阵B用三元组表表示
System.out.println("矩阵B: ");
Sparse1 b=new Sparse1(B);
//创建一个三元组表c,用来记录加法运算的结果,初始化长度为其最长,即结果矩阵中没有零元素时的长度
Sparse1 c=new Sparse1(A.length*A[0].length);
int x=0; //用来标记三元组表c中可用空间的起始地址
boolean existing=false; //用来标记a,b中有没有相同位置的元素以相加,初始化为没有,即false
//利用b处理a,将a的各元素做加法运算,结果放在c中
for (int i=0;i<a.table.length ;i++ )
{
for (int j=0;j<b.table.length ;j++ )
{
if (a.table[i].row==b.table[j].row && a.table[i].column==b.table[j].column && (a.table[i].data+b.table[j].data)!=0)
{
c.table[x].row=a.table[i].row;
c.table[x].column=a.table[i].column;
c.table[x].data=a.table[i].data+b.table[j].data;
b.table[j].data=0; //标记b中作过运算的元素
x++;
existing=true;
}
}
if (existing==false)
{
c.table[x].row=a.table[i].row;
c.table[x].column=a.table[i].column;
c.table[x].data=a.table[i].data; //实际上是a的元素和0相加
x++;
}
}
//将b中没有标记的元素与0相加放在c中
for (int i=0;i<b.table.length ;i++ )
{
if (b.table[i].data!=0)
{
c.table[x].row=b.table[i].row;
c.table[x].column=b.table[i].column;
c.table[x].data=b.table[i].data;
x++;
}
}
System.out.println("两个矩阵相加的结果是:");
c.output(A.length,A[0].length);
}
}
public static void main(String[] args)
{
plus_spar p1=new plus_spar();
//读入已知矩阵A,B的值
int a[][]={{0,2,3},
{3,2,1},
{3,5,3}
};
int b[][]={{0,5,5},
{4,1,1},
{3,1,3}
};
p1.A=a;
p1.B=b;
p1.plus(); //做矩阵加法运算并输出结果
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -