一 项目说明
实训目的:熟悉和掌握 Java 的基本语法,熟悉类的定义与对象的使用。
实训要求:设计一个类,该类中有行数和列数两个属性,以及有多个构造方法,能实现矩阵的加法、减法、矩阵与数的乘法、矩阵与矩阵的乘法及矩阵的转置。
二 项目实现设计
首先在类的声明前,引入扫描仪import java.util.Scanner; 然后在主方法中创建一个扫描仪Scanner input=new Scanner(System.in);通过扫描仪从键盘输入的数据来判断程序需要执行的功能switch(value)。
如果输入的为1,则执行矩阵和矩阵的乘法,先创建一个MyMatrix类的对象matric,然后通过调用MyMatrix类中的matricOne()和matricTwo()方法来创建第一个和第二个矩阵,然后调用类中的matricCheng(int matric1[][],int matric2[][])方法来进行两个矩阵的乘法运算。最后通过类中的inputMatric(int matric[][])方法将结果输出。
如果输入的为2,则执行矩阵和数字的乘法,一样通过MyMatrix类中的matricOne()方法来创建一个矩阵,在通过扫描仪int y=input.nextInt();从键盘输入要与矩阵相乘的数。紧接着调用类中matricShuCheng(int matric[][],int x)方法执行矩阵和数字的运算,最后通过类中的inputMatric(int matric[][])方法将结果输出。
如果输入的为3,则执行矩阵的加法,通过调用MyMatrix类中的matricOne()和matricTwo()方法来创建第一个和第二个矩阵,然后调用类中matricAdd(int matric1[][],int matric2[][] )方法来进行两个矩阵的加法运算。最后通过类中的inputMatric(int matric[][])方法将结果输出。
如果输入的为4,则执行矩阵的减法,通过调用MyMatrix类中的matricOne()和matricTwo()方法来创建第一个和第二个矩阵,然后调用类matricJian(int matric1[][],int matric2[][] )方法来进行两个矩阵的减法运算。最后通过类中的inputMatric(int matric[][])方法将结果输出。
如果输入的为5,则执行矩阵的转置,通过调用MyMatrix类中的matricOne()方法来创建一个矩阵,然后调用类中的matricReserve(int matric[][])方法来进行矩阵的转置运算。最后通过类中inputMatric(int matric[][])方法将结果输出。
package experiment.one;
import java.util.Scanner;
public class MyMatrix {
//创建矩阵
public int[][] createMatric(int row,int colum){
@SuppressWarnings("resource")
Scanner input=new Scanner(System.in);
int array[][]=new int[row][colum];
for(int i=0;i<array.length;i++)
for(int j=0;j<array[i].length;j++){
array[i][j]=input.nextInt();
}
return array;
}
//矩阵求和
public int[][] matricAdd(int matric1[][],int matric2[][] ){
int matric3[][]=new int[matric1.length][matric1[0].length];
if(matric1.length!=matric2.length||matric1[0].length!=matric2[0].length){
System.out.println("输入格式有误");
System.exit(0);
}else{
for(int i=0;i<matric1.length;i++)
for(int j=0;j<matric1[0].length;j++)
matric3[i][j]=matric1[i][j]+matric2[i][j];
}
return matric3;
}
//矩阵相减
public int[][] matricJian(int matric1[][],int matric2[][] ){
int matric3[][]=new int[matric1.length][matric1[0].length];
if(matric1.length!=matric2.length||matric1[0].length!=matric2[0].length){
System.out.println("输入格式有误");
System.exit(0);
}else{
for(int i=0;i<matric1.length;i++)
for(int j=0;j<matric1[0].length;j++){
matric3[i][j]=matric1[i][j]-matric2[i][j];
}
}
return matric3;
}
//两个矩阵相乘
public int[][] matricCheng(int matric1[][],int matric2[][]){
int matric3[][]=new int[matric1.length][matric1[0].length];
if(matric1.length!=matric2[0].length||matric1[0].length!=matric2.length){
System.out.println("输入格式有误");
System.exit(0);//退出虚拟机
}else {
for(int i=0;i<matric1.length;i++)
for(int j=0;j<matric2[0].length;j++)
for(int k=0;k<matric2.length;k++)
matric3[i][j]+=matric1[i][k]*matric2[k][j];
}
return matric3;
}
//矩阵转置
public int[][] matricReserve(int matric[][]){
int matric3[][]=new int[matric[0].length][matric.length];
for(int i=0;i<matric.length;i++) {
for(int j=0;j<matric[0].length;j++) {
matric3[j][i]=matric[i][j];
}
}
return matric3;
}
//一个矩阵和一个数字相乘
public int[][] matricShuCheng(int matric[][],int x){
for(int i=0;i<matric.length;i++)
for(int j=0;j<matric[0].length;j++) {
matric[i][j]=matric[i][j]*x;
}
return matric;
}
//输出矩阵
public void inputMatric(int matric[][]) {
System.out.println("运算结果为:");
for(int i=0;i<matric.length;i++) {
for(int j=0;j<matric[0].length;j++) {
System.out.print(matric[i][j]+" ");
}
System.out.println("");
}
}
//输入第一个矩阵
public int[][] matricOne() {
@SuppressWarnings("resource")
Scanner input=new Scanner(System.in);
MyMatrix matricOne=new MyMatrix();
System.out.println("请输入你所要创建的第一个矩阵(先输入行数,在输入列数,然后在输入具体的值)");
int row1=input.nextInt();
int colum1=input.nextInt();
int matric1[][]=matricOne.createMatric(row1,colum1);//创建第一个矩阵
return matric1;
}
//输入第二个矩阵
public int[][] matricTwo() {
@SuppressWarnings("resource")
Scanner input=new Scanner(System.in);
MyMatrix matricTwo=new MyMatrix();
System.out.println("请输入你所要创建的第二个矩阵(先输入行数,在输入列数,然后在输入具体的值)");
int row2=input.nextInt();
int colum2=input.nextInt();
int matric2[][]=matricTwo.createMatric(row2,colum2);//创建第二个矩阵
return matric2;
}
}
package experiment.one;
import java.util.Scanner;
public class TestMatrix {
public static void main(String args[]){
@SuppressWarnings("resource")
Scanner input=new Scanner(System.in);
System.out.println("请输入你要选择的功能:"+"\n"+"1:矩阵与矩阵的乘法"+"\n"+"2:矩阵和数字的乘法"+"\n"+"3:矩阵的加法"+"\n"+"4:矩阵的减法"+"\n"+"5:矩阵的转置");
int value=input.nextInt();
MyMatrix matric=new MyMatrix();
switch(value) {
case 1:
int matric1[][]=matric.matricOne();
int matric2[][]=matric.matricTwo();
int cheng[][]=matric.matricCheng(matric1,matric2);//矩阵和矩阵的乘法
matric.inputMatric(cheng);
break;
case 2:
int matric3[][]=matric.matricOne();
System.out.print("请输入要和矩阵相乘的数字:");
int y=input.nextInt();
int shucheng[][]=matric.matricShuCheng(matric3, y);//矩阵和数字的乘法
matric.inputMatric(shucheng);
break;
case 3:
int matric4[][]=matric.matricOne();
int matric5[][]=matric.matricTwo();
int add[][]=matric.matricAdd(matric4,matric5);//矩阵加法
matric.inputMatric(add);
break;
case 4:
int matric8[][]=matric.matricOne();
int matric9[][]=matric.matricTwo();
int jian[][]=matric.matricJian(matric8,matric9);//矩阵减法
matric.inputMatric(jian);
break;
case 5:
int matric10[][]=matric.matricOne();
int reserve[][]=matric.matricReserve(matric10);//矩阵的转置
matric.inputMatric(reserve);
break;
}
}
}