案例一
求一个3*3矩阵对角线元素之和
思路分析:利用双重for循环控制输入二维数组,再将a[i][j]累加后输出。i和j符合对角线元素的情况有,i=j或者i+j=a.length-1;
代码展示:
public static void main(String[] args) { //定义一个Scanner类 Scanner sc=new Scanner(System.in); //定义一个二维数组,并从键盘获取数值 int a[][]=new int[3][3]; for (int i = 0; i < a.length; i++) { System.out.println("请输入a["+i+"]一维数组内的三个整数:"); for (int j = 0; j < a[i].length; j++) { a[i][j]=sc.nextInt(); } } //打印输出这个3*3矩阵的二维数组 int sum=0; System.out.println("这个3*3矩阵的二维数组为:"); for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { System.out.print(a[i][j]+"\t"); if (i==j&&i+j!=a.length-1||i+j==a.length-1) { sum+=a[i][j]; } } System.out.println(); } System.out.println("对角线元素之和:"+sum); }
运行效果:
案例二
定义一个4行4列的二维数组,逐个从键盘输入值,然后将第1行和第4行的数据进行交换,将第2行和第3行的数据进行交换
思路分析:利用Arrays.copyOf方法复制
代码展示:
public static void main(String[] args) { // 定义一个Scanner类 Scanner sc = new Scanner(System.in); // 定义一个二维数组,并从键盘获取数值 int[][] a = new int[4][4]; for (int i = 0; i < a.length; i++) { System.out.println("请输入a[" + i + "]一维数组内的" + a.length + "个整数:"); for (int j = 0; j < a[i].length; j++) { a[i][j] = sc.nextInt(); } } // 打印输出这个4行4列二维数组 System.out.println("这个4行4例的二维数组为:"); for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { System.out.print(a[i][j] + "\t"); } System.out.println(); } // 定义一个中间的一维数组b,作为第1行和第4行交换的中间临时存储数组 int[] b = new int[4]; b = Arrays.copyOf(a[0], 4); a[0] = Arrays.copyOf(a[3], 4); a[3] = b; // 定义一个中间的一维数组c,作为第2行和第3行交换的中间临时存储数组 int[] c = new int[4]; c = Arrays.copyOf(a[1], 4); a[1] = Arrays.copyOf(a[2], 4); a[2] = c; //打印输出交换后的4行4列二维数组 System.out.println("交换后的4行4例二维数组为:"); for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { System.out.print(a[i][j] + "\t"); } System.out.println(); } }
运行效果:
案例三
定义一个3行4列的二维数组,逐个从键盘输入值,编写程序将四周的数据清0
思路分析:当a[i][j]数组的下标满足:i==0 || i==a.length-1 || j==0 || j==a[i].length-1,清理即可
代码展示:
public static void main(String[] args) { //定义一个Scanner类 Scanner sc=new Scanner(System.in); //定义一个二维数组,并从键盘获取数值 int a[][]=new int[3][4]; for (int i = 0; i < a.length; i++) { System.out.println("请输入a["+i+"]一维数组内的三个整数:"); for (int j = 0; j < a[i].length; j++) { a[i][j]=sc.nextInt(); } } //打印输出这个3*4矩阵的二维数组 System.out.println("这个3行4列的二维数组为:"); for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { //根据分析可知,要想四周为0,则当i=0或者i=2或者j=0或者j=3时,数值为0; if(i==0||i==a.length-1||j==0||j==a[i].length-1){ a[i][j]=0; } System.out.print(a[i][j]+"\t"); } System.out.println(); } }
运行效果:
案例四
定义一个3行4列的二维数组,逐个从键盘输入值,将左下三角的值清0
思路分析:a[i][j]数组,当i>=j的时候,为左下角三角形的数值(包含对角线);如果不需要包含对角线数值,则只需要i>j即可额。
代码展示:
public static void main(String[] args) { //定义一个Scanner类 Scanner sc=new Scanner(System.in); //定义一个二维数组,并从键盘获取数值 int a[][]=new int[3][4]; for (int i = 0; i < a.length; i++) { System.out.println("请输入a["+i+"]一维数组内的三个整数:"); for (int j = 0; j < a[i].length; j++) { a[i][j]=sc.nextInt(); } } //打印输出这个3*4矩阵的二维数组 System.out.println("这个3行4列的二维数组为:"); for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { //根据分析可知,要想左下三角的值为零,则i值不大于j值即可实现 if(i>=j){ a[i][j]=0; } System.out.print(a[i][j]+"\t"); } System.out.println(); } }
运行效果:
案例五
定义一个N*N二维数组,从键盘上输入值,找出每行中最大值组成一个一维数组并输出;
代码展示:
public static void main(String[] args) { /* * 定义一个N*N二维数组,从键盘上输入值,找出每行中最大值组成一个一维数组并输出; */ Scanner sc = new Scanner(System.in); System.out.print("请输入N*N二维数组的N值:"); int n = sc.nextInt(); // 定义N*N二维数组,并从键盘获取数值 int a[][] = new int[n][n]; for (int i = 0; i < a.length; i++) { System.out.println("请输入a[" + i + "]一维数组内的"+n+"个整数:"); for (int j = 0; j < a[i].length; j++) { a[i][j] = sc.nextInt(); } } // 打印输出N*N二维数组 //定义一个装每一行最大值 int[] maxNums=new int[n]; System.out.println("N*N二维数组为:"); for (int i = 0; i < a.length; i++) { int max=0; for (int j = 0; j < a[i].length; j++) { System.out.print(a[i][j] + "\t"); if(a[i][j]>max){ max=a[i][j]; } } maxNums[i]=max; System.out.println(); } //打印输出每一行最大值组成的数组 System.out.println("每行中最大值组成的一维数组为:"); for (int i : maxNums) { System.out.print(i+" "); } }