1.转圈显示的Java程序,将N x N的方阵转圈赋值并显示输出。如图:N=8,8x8方阵转圈填数结果。

转圈显示的Java程序和两矩阵相乘_程序


解析:这是一个依靠矩阵中每个元素的下标对其进行操作的典型事例。其要求将1~NXN之间的整数按照从外向里的顺时针方向将其放入其中,并显示输出。

文件名:

RotatitonClass.java

下面是这个程序的代码:
package javaapplication1;
public class RotatitonClass {
    public static final int N=8;   //方阵的大小
    public static void main(String[] args) {
        int[][] m = new int[N][N];  //创建N x N的方阵
        rotating(m,N);              //向方阵中填写数值
        printSquareMatrix(m,N);     //显示方阵
       }
    public static void rotating(int[][] m,int num)  //向方向中填写数值
    {
        int k = 1;                  //将要填写的数值
        for (int i = 0; i<=num/2;i++)  //将要填写的圈数
        {
            for (int j=i;j<num-i;j++)  //上方行方向
            {
                m[i][j]=k++;
            }
            for (int j=i+1;j<num-i;j++)  //右侧列方向
            {
                m[j][num-i-1]=k++;
            }
            for (int j=num-i-2;j>=i;j--)  //下方行方向
            {
                m[num-i-1][j]=k++;
            }
            for (int j=num-i-2;j>i;j--)  //左侧方向
            {
                m[j][i]=k++;
            }
        }
    }
    public static void printSquareMatrix(int[][] m,int num) //显示方阵
    {
        System.out.println();
        for (int i=0;i<num;i++)
        {
            for (int j=0;j<num;j++)
            {
                System.out.printf("%4d", m[i][j]);
            }
            System.out.println();
        }
    }
}

在上述小Java程序中,除main主函数外,还定义了2个成员函数,成员函数rotating用于实现按照要求为方阵转圈填数的操作;成员函数printSquareMatrix用于显示方阵。

   成员函数rotating是这个程序的核心,它采用每次循环一次填写一圈的算法将NxN个整数填入方阵中。具体做法是从外向内依次填写每圈的内容,每圈按照上、右、下、左的顺时针顺序填写。每圈需要填写的元素数量由方阵大小(num)和圈数(i)决定。

2.  利用二维数组表示矩阵,并实现两个矩阵相乘的操作。

解析:矩阵可以用来表示统计数据等方面的各种有关联的数据。在数学上,矩阵可以是由方程组的系数及常数构成的方阵。在矩阵的运算中,要求两个相乘的矩阵必须满足第1个矩阵的列数等于第2个矩阵的行数。即对于 Am1×n1和Bm2×n2,要求n1=m2,且结果矩阵C的行列数为m1×n2,其中的每个元素内容为

 转圈显示的Java程序和两矩阵相乘_相乘_02

文件名:Matrix.java

一下是程序的代码:

package javaapplication3;
public class Matrix {
    public static final int M1 = 8; //第1个矩阵的行数
    public static final int N1 = 5; //第1个矩阵的列数
    public static final int M2 = 5; //第2个矩阵的行数
    public static final int N2 = 6; //第2个矩阵的列数

    public static void main(String[] args) {
        int [][] a =new int[M1][N1]; //创建第1个矩阵
        int [][] b =new int[M2][N2]; //创建第2个矩阵

        enterMatrix(a,M1,N1);   //输入第1个矩阵
        enterMatrix(b,M2,N2);   //输入第2个矩阵
        printMatrix(a,M1,N1);   //显示第1个矩阵
        printMatrix(b,M2,N2);   //显示第2个矩阵

        if (N1==M2)
        {
            int[][] c = new int[M1][N2];
            MulMatrix(a,M1,N1,b,M2,N2,c);
            printMatrix(c,M1,N2);
        }
      }

public static void enterMatrix(int[][] m, int row, int col) {  //输入矩阵
      for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                m[i][j] = (int) Math.round(Math.random() * 10);
            }
     }}
public static void printMatrix(int[][] m, int row, int col) {  //显示矩阵
          System.out.println();
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                System.out.printf("%4d",m[i][j]);
            }
            System.out.println();
        }
        System.out.println();
 }
//两矩阵相乘
public static void MulMatrix(int[][] a, int row1, int col1, int[][] b, int row2, int col2, int[][] c) {
for (int i = 0; i < row1; i++) {
            for (int j = 0; j < col2; j++) {
                c[i][j] = 0;
                for (int k = 0; k < col1; k++) {
                    c[i][j] += a[i][k] * b[k][j];
                } } }
 }

}

运行效果:

第1个矩阵

转圈显示的Java程序和两矩阵相乘_程序_03 

第2个矩阵

转圈显示的Java程序和两矩阵相乘_相乘_04 

两矩阵之乘积

转圈显示的Java程序和两矩阵相乘_矩阵_05

    上述程序中,除main函数外,还定义了3个成员函数,成员函数enterMatrix用于实现为矩阵赋值的操作;成员函数printMatrix用于显示矩阵;成员函数MulMatrix用于实现两个矩阵相乘的操作。

   在成员函数enterMatrix中,为了避免调试程序时需要输入大量数据所带来的麻烦,利用Math类中提供的random这个随机函数产生0~1之间的数值,并经过乘以10再四舍五入的处理,映射为0~10之间的整数,以此模拟键盘的输入,这是在调试程序时经常用到的手段。(在里我们也可根据需要自己输入)

   在成员函数printMatrix中,给出的是显示矩阵的常规格式,即外层控制行的输出,内层循环控制烈的输出,每行的内容输出完毕后执行一条换行语句,以此达到矩阵内容按照行列格式输出。

   在成员函数MulMatrix中,利用三重循环实现了两个矩阵相乘的操作,这也是一种常规的书写格式。