1.转圈显示的Java程序,将N x N的方阵转圈赋值并显示输出。如图:N=8,8x8方阵转圈填数结果。
解析:这是一个依靠矩阵中每个元素的下标对其进行操作的典型事例。其要求将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,其中的每个元素内容为
文件名: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个矩阵
第2个矩阵
两矩阵之乘积
上述程序中,除main函数外,还定义了3个成员函数,成员函数enterMatrix用于实现为矩阵赋值的操作;成员函数printMatrix用于显示矩阵;成员函数MulMatrix用于实现两个矩阵相乘的操作。
在成员函数enterMatrix中,为了避免调试程序时需要输入大量数据所带来的麻烦,利用Math类中提供的random这个随机函数产生0~1之间的数值,并经过乘以10再四舍五入的处理,映射为0~10之间的整数,以此模拟键盘的输入,这是在调试程序时经常用到的手段。(在里我们也可根据需要自己输入)
在成员函数printMatrix中,给出的是显示矩阵的常规格式,即外层控制行的输出,内层循环控制烈的输出,每行的内容输出完毕后执行一条换行语句,以此达到矩阵内容按照行列格式输出。
在成员函数MulMatrix中,利用三重循环实现了两个矩阵相乘的操作,这也是一种常规的书写格式。