用Java实现矩阵的运算

一 项目说明 

实训目的:熟悉和掌握 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[][])方法将结果输出。

扫描二维码关注公众号,回复: 8804876 查看本文章
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;
		}
	}
}
发布了29 篇原创文章 · 获赞 3 · 访问量 412

猜你喜欢

转载自blog.csdn.net/dwjdj/article/details/103564187