一、题目要求:
1、定义一个二维数组,从键盘输入一个矩阵的值
2、对矩阵进行转置,输出转置后的矩阵
3、求出原矩阵中的最大值和最小值,输出其所在的行号和列号。
二、理解:
1、矩阵转置的含义:设A为m×n阶 矩阵(即m行n列),第i 行j 列的元素是a(i,j),即:A=a(i,j)
定义A的转置为这样一个n×m阶矩阵B,满足B=a(j,i),即 b (i,j)=a (j,i)(B的第i行第j列元素是A的第j行第i列元素),记A'=B。
例如:
矩阵转置后为:
2、先设其中一个数组元素为最大/小值,判断大小用冒泡排序,Arrays.sort()等方法,取得最大/小值后取出其行列号+1(因行列号从0开始)。
三、实现
1、定义一个二维数组,从键盘输入一个矩阵的值
public class 数组{
//设置二维数组
public static void main(String[] agrs) {
Scanner input=new Scanner(System.in);
int H,L,i,j;
System.out.println("输入数组行数");
H=input .nextInt();
System.out.println("输入数组列数");
L=input.nextInt();
int [][] erwei=new int[H][L];
//输入数组元素
System.out.println("输入数组元素");
for (i = 0; i < H; i++) {
for (j = 0; j < L; j++) {
erwei [i][j] = input.nextInt();
}
}
//输出转置前数组
System.out.println("输入的二维数组为:");
for ( i = 0; i < H; i++) {
for (j = 0; j < L; j++) {
System.out.print(erwei[i][j] + " ");
}
System.out.println();
}
2、对矩阵进行转置,输出转置后的矩阵
//转置
int [][] zhuanerwei=new int[erwei[0].length][erwei.length];
for(i=0;i<erwei.length;i++) {
for(j=0;j<erwei[i].length;j++) {
zhuanerwei[j][i]=erwei[i][j];
}
}
//输出转置后数组
System.out.println("转置后的二维数组为:");
for (i= 0; i< zhuanerwei.length; i++) {
for (j = 0; j< zhuanerwei[i].length; j++) {
System.out.print(zhuanerwei[i][j] + " ");
}
System.out.println();
}
}
3、求出原矩阵中的最大值和最小值,输出其所在的行号和列号。
//比较数组元素大小
float max=erwei[0][0],maxH=0,maxL=0;//最大值,最大值的行和列
float min=erwei[0][0],minH=0,minL=0;//最小值,最小值的行和列
for(i=0 ;i<erwei.length;i++) {
for(j=0;j<erwei[i].length;j++) {
if(erwei[i][j]>=max) {
max=erwei[i][j];
maxH=i+1;
maxL=j+1;
}
if(erwei[i][j]<=min) {
min=erwei[i][j];
minH=i+1;
minL=j+1;
}}
}
System.out.println("最大值="+max+";最大值行"+maxH+";最大值列"+maxL);
System.out.println("最小值="+min+";最小值行"+minH+";最小值列"+minL);
4、完整代码
package text;
import java.io.InputStream;
import java.util.Scanner;
public class 二维数组{
//设置二维数组
public static void main(String[] agrs) {
Scanner input=new Scanner(System.in);
int H,L,i,j;
System.out.println("输入数组行数");
H=input .nextInt();
System.out.println("输入数组列数");
L=input.nextInt();
int [][] erwei=new int[H][L];
//输入数组元素
System.out.println("输入数组元素");
for (i = 0; i < H; i++) {
for (j = 0; j < L; j++) {
erwei [i][j] = input.nextInt();
}
}
//输出转置前数组
System.out.println("输入的二维数组为:");
for ( i = 0; i < H; i++) {
for (j = 0; j < L; j++) {
System.out.print(erwei[i][j] + " ");
}
System.out.println();
}
//转置
int [][] zhuanerwei=new int[erwei[0].length][erwei.length];
for(i=0;i<erwei.length;i++) {
for(j=0;j<erwei[i].length;j++) {
zhuanerwei[j][i]=erwei[i][j];
}
}
//输出转置后数组
System.out.println("转置后的二维数组为:");
for (i= 0; i< zhuanerwei.length; i++) {
for (j = 0; j< zhuanerwei[i].length; j++) {
System.out.print(zhuanerwei[i][j] + " ");
}
System.out.println();
}
//比较数组元素大小
float max=erwei[0][0],maxH=0,maxL=0;//最大值,最大值的行和列
float min=erwei[0][0],minH=0,minL=0;//最小值,最小值的行和列
for(i=0 ;i<erwei.length;i++) {
for(j=0;j<erwei[i].length;j++) {
if(erwei[i][j]>=max) {
max=erwei[i][j];
maxH=i+1;
maxL=j+1;
}
if(erwei[i][j]<=min) {
min=erwei[i][j];
minH=i+1;
minL=j+1;
}}}
System.out.println("最大值="+max+";最大值行"+maxH+";最大值列"+maxL);
System.out.println("最小值="+min+";最小值行"+minH+";最小值列"+minL);
}
}