版权声明:欢迎转载,但转载时请注明原文地址 https://blog.csdn.net/weixin_42110638/article/details/83382303
- 利用二维数组(double[])实现一个矩阵类:Matrix。要求提供以下方法:(1)set(int row, int col, double value):将第row行第col列的元素赋值为value;(2)get(int row,int col):取第row行第col列的元素;(3)width():返回矩阵的列数;(4)height():返回矩阵的行数;(5)Matrix add(Matrix b):返回当前矩阵与矩阵b相加后的矩阵;(6)Matrix multiply(Matrix b):返回当前矩阵与矩阵b相乘后的矩阵。(7)Matrix transpose():返回当前矩阵的转置矩阵;(8)getMax():返回矩阵中的最大值及其所在行和列;(9)print():以行和列的形式打印出当前矩阵。
package shiyan7;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
matrix2 a = new matrix2(3,4);
matrix2 b = new matrix2(3,4);
matrix2 c = new matrix2(4,5);
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 4; j++) {
a.set(i, j, 1);
b.set(i, j, 2);
}
}
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 5; j++) {
c.set(i, j, i+j);
}
}
System.out.println("矩阵A:");
a.print();
System.out.println("矩阵B:");
b.print();
System.out.println("矩阵C:");
c.print();
matrix2 apb = a.add(b);
System.out.println("矩阵A+B:");
apb.print();
System.out.println("矩阵A*B:");
matrix2 bmc = b.multiply(c);
bmc.print();
System.out.println("矩阵C的转置矩阵:");
matrix2 tra = c.transpose();
tra.print();
System.out.println("C的转置矩阵中的最大值及其所在行和列:");
double[] res = c.getMax();
System.out.println("最大值:"+res[2]+" 在"+ res[0] +"行,"+res[1]+"列");
}
}
package shiyan7;
public class matrix2 {
public double [][]a;
public matrix2(int row,int col)
{
this.a = new double[row][col];
}
public void set(int row, int col, double value)
{
this.a[row][col] = value;
}
public double get(int row,int col)
{
return this.a[row][col];
}
public int width()//返回列数
{
return a[0].length;
}
public int height()
{
return a.length;
}
public matrix2 add(matrix2 m)//两矩阵相加
{
/*
matrix2 matrix;
int row = this.a.length > m.a.length ? this.a.length :m.a.length;
int col = this.a[0].length > m.a[0].length ? this.a[0].length : m.a[0].length;
matrix = new matrix2(row,col);
for(int i = 0;i < m.a.length;i++)
{
for(int j = 0;j < m.a[0].length;j++)
{
matrix.a[i][j] = m.a[i][j];
}
}
for(int i = 0;i < m.a.length;i++)
{
for(int j = 0;j < m.a[0].length;j++)
{
matrix.a[i][j] += this.a[i][j];
}
}
return matrix;
*/
matrix2 t = new matrix2(this.a.length,m.a[0].length);
for(int i = 0; i < m.a.length; i++) {
for(int j = 0; j < m.a[0].length; j++) {
t.set(i, j, this.get(i, j) + m.get(i, j));
}
}
return t;
}
public matrix2 multiply(matrix2 m)//两矩阵相乘
{
if(this.a[0].length != m.a.length)
return null;
matrix2 matrix = new matrix2(this.a.length,m.a[0].length);
double sum = 0;
for(int i = 0;i < this.a.length;i++)
{
for(int j = 0;j < m.a[0].length;j++)
{
sum = 0;
for(int k = 0;k < m.a.length;k++)
{
sum += this.a[i][k]*m.a[k][j];
}
matrix.a[i][j] = sum;
}
}
return matrix;
}
public void print()
{
for(int i = 0;i < a.length;i++)
{
for(int j = 0;j < a[0].length;j++)
{
if(j==0)
System.out.print(a[i][j]);
else
System.out.print(" "+a[i][j]);
}
System.out.println();
}
System.out.println();
}
public matrix2 transpose() //求转置矩阵
{
matrix2 t = new matrix2(this.width(), this.height());
for(int i = 0; i <t.height(); i++)
for(int j = 0; j < t.width(); j++)
t.set(i, j, this.get(j, i));
return t;
}
public double[] getMax()
{
double max = this.get(0, 0);
int col = 0;
int row = 0;
for(int i = 0; i < this.height(); i++) {
for(int j = 0; j < this.width(); j++) {
if(this.get(i, j) > max) {
max = this.get(i, j);
col = j;
row = i;
}
}
}
double[] res = new double[3];
res[0] = col;
res[1] = row;
res[2] = max;
return res;
}
}