Java第一次作业第五题

该文章描述了一个Java类Matrix,用于处理N*N的字符矩阵。类中包含了将字符串转换为二维数组、执行矩阵加法、减法、乘法以及行列互换的功能。矩阵运算通过将输入的字符串拆分、转换为整型数组,然后进行计算,最后再转换回字符串输出。
摘要由CSDN通过智能技术生成

package Matrix;

/*3.编写一个Matrix类,包含两个数据成员:String inArr(输入的字符矩阵),int n(N*N矩阵的行数)。

* 矩阵都是以一维形式保存的二维数组,比如输入String类型的"1,2,3,4,5,6,7,8,9",实际上表示如下3*3的矩阵: 

1,2,3,4,5,6,7,8,9。实现以下功能:

(1)String add(String inArr,int n):实现两个N*N矩阵的相加,返回相加后的字符矩阵。

(2)String subtraction(String inArr,int n): 实现两个N*N矩阵的相减,返回相减后的字符矩阵。

(3)String multiply(String inArr,int n): 实现两个N*N矩阵的相乘,返回相乘后的字符矩阵。

(4)String rotation ( ):将N*N矩阵的行列互换,返回转值后的字符矩阵,例如,输入InArr ="1,2,3,4,5,6,7,8,9",n=3

返回:"1,4,7,2,5,8,3,6,9"。

*/

/*思路(1)(2):将输入的String类型通过string.split转化为string[]类型,然后循环遍历将其转化为int类型,

计算后,通过string.valueof转化为String[]类型,再通过String.tostring将其输出*/

public class Matrix {

public String inArr;

public int n;

Matrix(){}

public String[] changeString(String inArr)//将输入InArr =1,2,3,4,5,6,7,8,9转化为"123456789"

{

String[] inArrstr=inArr.split(",");//转为String[]类型

return inArrstr;

}

public int[] changeint(String[] inArr)

{

int[] num=new int [inArr.length];

for(int i=0;i<inArr.length;i++)

{

num[i]=Integer.parseInt(inArr[i]);//转为int类型

}

return num;

}

public String convertStringArrayToString(String[] str ,String sign)

{

StringBuilder hh=new StringBuilder();//由于String类型是不可修改类型,所以转化为StringBulider类型

for(String strr:str)

{

hh.append(strr).append(sign);

}

return hh.substring(0,hh.length()-1);

}

public String add(String inArr,int n)

{

String[] inArrstr1=inArr.split(",");//转为String[]类型 或者直接用changeString((String inArr)

int[] num1=new int [inArrstr1.length];

for(int i=0;i<inArrstr1.length;i++)

{

num1[i]=Integer.parseInt(inArrstr1[i]);//转为int类型

}

int[] num2=this.changeint(changeString(this.inArr));

int[] num3=new int[this.n*this.n];

for(int i=0;i<n*n;i++)

{

num3[i]=num2[i]+num1[i];

}

String[] inArrstr2=new String[this.n*this.n];

for(int i=0;i<n*n;i++)

{

inArrstr2[i]=String.valueOf(num3[i]);

}

 

String strr=convertStringArrayToString(inArrstr2,",");

return strr;

}

 

 

 

 

public String subtraction(String inArr,int n)

{

String[] inArrstr1=inArr.split(",");//转为String[]类型

int[] num1=new int [inArrstr1.length];

for(int i=0;i<inArrstr1.length;i++)

{

num1[i]=Integer.parseInt(inArrstr1[i]);//转为int类型

}

int[] num2=this.changeint(changeString(this.inArr));

int[] num3=new int[this.n*this.n];

for(int i=0;i<n*n;i++)

{

num3[i]=num2[i]-num1[i];

}

String[] inArrstr2=new String[this.n*this.n];

for(int i=0;i<n*n;i++)

{

inArrstr2[i]=String.valueOf(num3[i]);

}

 

String strr=convertStringArrayToString(inArrstr2,",");

return strr;

}

 

 

public String multiply(String inArr,int n)//实现两个N*N矩阵的相乘,返回相乘后的字符矩阵。

{

String[] inArrstr1=inArr.split(",");//转为String[]类型

int[] num1=new int [inArrstr1.length];

for(int i=0;i<inArrstr1.length;i++)

{

num1[i]=Integer.parseInt(inArrstr1[i]);//转为int类型

}

int[] num2=this.changeint(changeString(this.inArr));

int[] num3=new int[this.n*this.n];

for(int i=0;i<n;i++)

{

for(int j=0;j<n;j++)

{

int sum=0;

for(int k=0;k<n;k++)

{

sum+=num2[i*n+k]*num1[k*n+j];

}

num3[i*n+j]=sum;

}

}

String[] inArrstr2=new String[this.n*this.n];

for(int i=0;i<n*n;i++)

{

inArrstr2[i]=String.valueOf(num3[i]);

}

 

String strr=convertStringArrayToString(inArrstr2,",");

return strr;

}

 

/*

* String rotation ( ):将N*N矩阵的行列互换,返回转值后的字符矩阵,例如,输入InArr

* ="1,2,3,4,5,6,7,8,9",n=3 返回:"1,4,7,2,5,8,3,6,9"。

*/

 

public String rotation( )

{

int[] num=this.changeint(changeString(this.inArr));

int m=0;

for(int i=0;i<n;i++)

{

for(int j=0;j<i;j++)

{

m=num[i*n+j];

num[i*n+j]=num[j*n+i];

num[j*n+i]=m;

}

}

String[] inArrstr2=new String[this.n*this.n];

for(int i=0;i<n*n;i++)

{

inArrstr2[i]=String.valueOf(num[i]);

}

 

String strr=convertStringArrayToString(inArrstr2,",");

return strr;

 

}

public String toString()

{

return("inArr:"+inArr+","+"n:"+n);

}

 

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值