**题目1:**利用二维数组(double[])实现一个矩阵类:Matrix。
要求提供以下方法:
(1)set(int row, int col, double value):将第row行第col列的元素赋值为value;
(2)get(int row,int col):取第row行第col列的元素;
(3)width():返回矩阵的列数;
(4)height():返回矩阵的行数;
(5)Matrix add(Matrix b):返回当前矩阵与矩阵b相加后的矩阵;
(6)Matrix multiply(Matrix b):返回当前矩阵与矩阵b相乘后的矩阵。
(7)Matrix transpose():返回当前矩阵的转置矩阵;
(8)getMax():返回矩阵中的最大值及其所在行和列;
(9)print():以行和列的形式打印出当前矩阵。
编写测试方法,调用上述方法进行验证。
完整代码如下:
class Matrix{
double matrix[][];
public Matrix(int row,int col){
this.matrix = new double[row][col];
}//构造函数
public void set(int row, int col, double value){
this.matrix[row][col]=value;
}//将第row+1行第col+1列的元素赋值为value
public double get(int row,int col){
return matrix[row][col];
}//取第row+1行第col+1列的元素
public int width(){
return matrix[0].length;
}//返回矩阵的列数
public int height(){
return matrix.length;
}//返回矩阵的行数
public Matrix add(Matrix b){
Matrix sum=new Matrix(this.height(),this.width());
double s;
for(int i=0;i<this.height();i++) {//行
for(int j = 0;j<this.width();j++) {//列
s=this.get(i,j)+b.get(i, j);
sum.set(i,j,s);
}
}
return sum;
}//矩阵相加
public Matrix multiply(Matrix b){
if(this.height()!=b.width()) {
System.out.println("第一个矩阵的行数不等于第二个矩阵的列数,不能进行矩阵相乘运算!");
return null;
}
Matrix sum=new Matrix(this.height(),b.width());
double s=0;
for(int i=0;i<this.height();i++) {
for(int j=0;j<b.width();j++) {
for(int m=0;m<b.height();m++) {
s=s+this.get(i, m)*b.get(m, j);
}
sum.set(i, j, s);
}
}
return sum;
}//矩阵相乘
public Matrix transpose(){
Matrix t=new Matrix(this.height(),this.width());
for(int i=0;i<this.height();i++) {
for(int j=0;j<this.width();j++) {
t.set(i, j, this.get(j, i));
}
}
return t;
}//求转置矩阵
double[] getMax(){
double max=get(0,0);
int row=0;
int col=0;
for(int i = 0; i <=height()-1; i++){
for(int j = 0; j <=width()-1; j++) {
if(this.get(i, j) > max) {
max = get(i, j);
col = j;
row = i;
}
}
}
double[] mix = new double[3];
mix[0] = col+1;
mix[1] = row+1;
mix[2] = max;
return mix;
}//返回矩阵中的最大值及其所在行和列
void print(){
for(int i=0;i<this.height();i++) {
for(int j=0;j<this.width();j++) {
System.out.print(this.get(i, j)+" ");
}
System.out.println();
}
}//以行和列的形式打印出当前矩阵
}
public class One {
public static void main(String args[]){
//1.创建一个5行5列,每个元素为1的矩阵,
//和一个5行5列,每个函数为3的矩阵,
//同时测试了set()函数和print()函数
Matrix a=new Matrix(5,5);
for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) {
a.set(i, j, 1);
}
}
Matrix b=new Matrix(5,5);
for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) {
b.set(i, j, 3);
}
}
System.out.println("a矩阵为:");
a.print();
System.out.println("b矩阵为:");
b.print();
//2.测试get()函数
a.set(3, 4, 5);
System.out.println("a矩阵第4行第5列的元素为:"+a.get(3, 4));
//3.测试width()函数和height()函数
System.out.println("a矩阵的行数为"+a.height()+",a矩阵的列数为"+a.width());
//4.测试add()函数
Matrix ab=a.add(b);
System.out.println("a矩阵加b矩阵为:");
ab.print();
//5.测试multiply()函数
Matrix axb=a.multiply(b);
System.out.println("a矩阵乘b矩阵为:");
axb.print();
//6.测试transpose()函数
System.out.println("将a矩阵第2行第2列的元素改为6后,新的a矩阵为:");
a.set(1, 1, 6);
a.print();
Matrix c=a.transpose();
System.out.println("新的a矩阵的转置矩阵为:");
c.print();
//7.测试getMax()函数
System.out.println("现在a矩阵中的最大值为:"+a.getMax()[2]);
System.out.println("在第"+a.getMax()[0]+"行,第"+a.getMax()[1]+"列");
}
}
运行截图如下:
**题目2:**打印乘法口诀表
(1)编写一个方法,参数(二维数组),完成将二维数组中的数据按照行列显示的工作。
(2)编写一个测试方法,给出99乘法表,放入到二维数组中,调用(1)中的方法,显示乘法口诀表。
完整代码如下:
class Chengfabiao{
int matrix[][];
public Chengfabiao(int row,int col){
this.matrix = new int[row][col];
}//构造函数
public void set(int row, int col, int value){
this.matrix[row][col]=value;
}//将第row行第col列的元素赋值为value
public int get(int row,int col){
return matrix[row][col];
}//取第row行第col列的元素
public int width(){
return matrix[0].length;
}//返回矩阵的列数
public int height(){
return matrix.length;
}//返回矩阵的行数
void print(){
for(int i=0;i<this.height();i++) {
for(int j=0;j<this.width();j++) {
System.out.print(i+"*"+j+"="+this.get(i, j)+" ");
}
System.out.println();
}
}//以行和列的形式打印出当前矩阵
}
public class Two {
public static void main(String args[]) {
Chengfabiao m=new Chengfabiao(10,10);
for(int i=0;i<m.height();i++) {
for(int j=0;j<m.width();j++) {
m.set(i, j, i*j);
}
}
m.print();
}
}
运行截图: