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);
}
}