先上代码
package MatrixCalculate;
import java.util.Scanner;
public class Matrix {
private int length1=10,length2=10;//length1、length2分别表示行列
private int [][]matrix=new int [length1][length2];//最多支持10*10的矩阵
Scanner scan = new Scanner(System.in);//支持输入
public Matrix(int length1,int length2) {
this.length1=length1;
this.length2=length2;
}//构造方法重载
public Matrix() {
}//构造方法
public void InputLength() {
System.out.println("输入你需要计算的矩阵行列数");
length1=scan.nextInt();
length2=scan.nextInt();//调用输入方法
}
public void InputMatrix() {
System.out.println("输入你需要计算的矩阵");
for(int i=0;i<length1;i++) {
for(int k=0;k<length2;k++) {
matrix[i][k]=scan.nextInt();
}
}
}//输入矩阵方法
public void OutputMatrix() {
for(int i=0;i<length1;i++) {
for(int k=0;k<length2;k++) {
System.out.print(matrix[i][k]+" ");
}
System.out.println();
}
}//输出矩阵方法
//计算矩阵
public Matrix CalculateMatrix(Matrix m1) {//参数列表可以接收一个矩阵对象,调用方法的对象矩阵与参数列表接收的对象矩阵相乘
Matrix MATRIX=new Matrix(this.length1,m1.length2);//创建一个新对象存放结果矩阵,并返回矩阵对象
for(int i=0;i<this.length1;i++) {
for(int j=0;j<m1.length2;j++) {
for(int k=0;k<m1.length2;k++) {
MATRIX.matrix[i][j]+=this.matrix[i][k]*m1.matrix[k][j];
}
}
}
return MATRIX;
}//满足矩阵相乘的要求后算矩阵乘法
public int ShowLength1() {
return this.length1;
}
public int ShowLength2() {
return this.length2;
}//为外部提供应该获l1\l2的接口
public static void main(String[] args) {
Matrix matrix1=new Matrix();
Matrix matrix2=new Matrix();
matrix1.InputLength();
matrix2.InputLength();
matrix1.InputMatrix();
matrix2.InputMatrix();
if(matrix1.ShowLength2()==matrix2.ShowLength1()) {
Matrix multmatrix=new Matrix(matrix1.ShowLength1(),matrix2.ShowLength2());
multmatrix=matrix1.CalculateMatrix(matrix2);
multmatrix.OutputMatrix();
}
}
}
遇到了以下问题:
- 代码没有报错却无法运行。
查找问题:main方法没有static修饰。
解决问题:在main方法前添加static。
错误分析:static表示静态方法,可以脱离类而实现,也就是说可以没有一个类的实例也能执行这个static方法,类似于一个全局方法。因此,static方法中的代码必须是可以单独拿出来执行的,如果要执行这个类中的非static方法,必须先实现一个这个类的实例。(查询CSDN大佬的解释获得关于main方法需加staticd原因) - 有static修饰的方法内的数据有报错消息。大概意思是:无法对非静态变量进行静态引用。
查找问题:static修饰的方法内有对非静态变量的引用。
解决问题:去掉方法前的static。
错误分析:一个方法用static修饰,便是静态方法或类方法。静态方法不属于特定对象。由于static方法在装载class时首先完成,比构造方法早,此时非static属性和方法还没有完成初始化。(查询CSDN大佬的解释获得关于static的相关知识)