二维数组练习题

1、什么是二维数组以及二维数组的写法

public class ArrayDemo01 {
    public static void main(String[] args) {
        /*
        二维数组:即数组的嵌套,数组里面的元素又是一个数组
         */

        //声明二维数组,数据类型[][] 数组名; 或者 数据类型 数组名[][];
        //声明一个int类型的二维数组
        int[][] nums;
        //声明一个String类型的二维数组
        String[][] strs;

        //分配空间(告诉你这个数组里可以存储多少个元素):   数组名 = new 数据类型[数组长度][数组长度];  或者 数组名 = new 数据类型[数组长度][];
        //注意:二维数组在分配空间的时候,第一个数组长度必须要写,告诉你这个二维数组里有多少个元素,第二数组长度可以写,可以不写,不过写了,表示这个二维数组里的里面的元素(一维数组)的长度,如果没有写,这个二维数组里面的元素(一维数组)长度可以不一样
        //给nums数组分配空,这个数组可以存储3个元素,里面的元素长度都相同,都为5
        nums = new int[3][5];
        //给strs数组分配空间,这个数组可以存储5个元素,里面的元素长度不相同
        strs = new String[5][];

        //赋值:数组名[下标][下标] = 数据;
        //给nums数组里的第一个元素(一维数组)下标为0的元素赋值为9
        nums[0][0] = 9;

        nums[2][4] = 84;
        // nums[2][5] = 99;//ArrayIndexOutOfBoundsException
        // System.out.println(nums[2][5]);

        //操作数据:数组名[下标][下标];

    }
}
public class ArrayDemo02 {
    public static void main(String[] args) {
        // 二维数组的声明和分配空间合并写
        //数据类型[][] 数组名=new 数据类型[数组长度][数组长度];  或者  数据类型[][] 数组名=new 数据类型[数组长度][];

        int[][] nums = new int[5][3];
        int[][] nums2 = new int[3][];
        String[][] strs = new String[6][5];
        String[][] strs2 = new String[8][];

        //二维数组的声明、分配空间、赋值合并写
        //数据类型[][] 数组名 = new 数据类型[][]{{数据1,数据2,...,数据n},{数据1,数据2,...,数据n},....,{数据1,数据2,...,数据n}};   注意:new后面的两个[][]里都不能写数组长度
        char[][] chars = new char[][]{{'a','b','c'},{'c','d'},{'m'}};

        //二维数组的声明、分配空间、赋值合并的简写方式
        //数据类型[][] 数组名 = {{数据1,数据2,...,数据n},{数据1,数据2,...,数据n},....,{数据1,数据2,...,数据n}};
        double[][] nums3 = {{2.5,5.5},{11.5,55.5},{99.9,88.8},{70.5,50}};

    }
}

2、求一个3*3矩阵对角线元素之和

<提示>程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

import java.util.Scanner;

public class Subject02 {
    public static void main(String[] args) {
        
        //声明一个二维数组
        int[][] num=new int[3][3];
        //声明Scanner类
        Scanner sc=new Scanner(System.in);
        for (int i=0;i< num.length;i++){
            for (int j=0;j<num[i].length;j++){
                System.out.println("请输入第"+(i+1)+"行第"+(j+1)+"个数据");
                num[i][j]=sc.nextInt();
            }
            System.out.println();
        }
        System.out.println("这个矩阵大致形状为:");
        int sum=0;
        for (int i=0;i<num.length;i++){
            for (int j=0;j<num[i].length;j++){
                if (i==j){
                    sum+=num[i][j];
                }
                System.out.print(num[i][j]+" ");
            }
            System.out.println();
        }
        System.out.println("对角线之和为:"+sum);
    }
}

3、定义一个44列的二维数组,逐个从键盘输入值,然后将第1行和第4行的数据进行交换,将第2行和第3行的数据进行交换。

import java.util.Scanner;

public class Subject03 {
    public static void main(String[] args) {
        //定义一个4行4列的二维数组,逐个从键盘输入值,
        // 然后将第1行和第4行的数据进行交换,
        // 将第2行和第3行的数据进行交换

        //声明二维数组
        int[][] num=new int[4][4];
        //声明Scanner类
        Scanner sc=new Scanner(System.in);
        //输入数据
        for (int i=0;i<num.length;i++){
            for (int j=0;j<num[i].length;j++){
                System.out.println("请输入第"+(i+1)+"行第"+(j+1)+"列的数");
                num[i][j]=sc.nextInt();
            }
        }
        //遍历
        System.out.println("输入的矩阵为");
        for (int i=0;i<num.length;i++){
            for (int j=0;j<num[i].length;j++){
                System.out.print(num[i][j]+" ");
            }
            System.out.println();
        }
        int[] temp=new int[4];
        for (int i=0;i<num.length;i++){
            temp[i]=num[0][i];
            num[0][i]=num[3][i];
            num[3][i]=temp[i];
            temp[i]=num[1][i];
            num[1][i]=num[2][i];
            num[2][i]=temp[i];
        }
        //遍历
        System.out.println("转化后的矩阵为:");
        for (int i=0;i<num.length;i++){
            for (int j=0;j<num[i].length;j++){
                System.out.print(num[i][j]+" ");
            }
            System.out.println();
        }
    }
}

4、定义一个34列的二维数组,逐个从键盘输入值,编写程序将四周的数据清0。

import java.util.Scanner;

public class Subject04 {
    public static void main(String[] args) {
        //定义一个3行4列的二维数组,逐个从键盘输入值,编写程序将四周的数据清0

        //声明二维数组
        int[][] num=new int[3][4];
        //声明Scanner类
        Scanner sc=new Scanner(System.in);
        //输入数据
        for (int i=0;i<num.length;i++){
            for (int j=0;j<num[i].length;j++){
                System.out.print("请输入第"+(i+1)+"行第"+(j+1)+"列的数据");
                num[i][j]=sc.nextInt();
            }
            System.out.println();
        }
        //遍历
        System.out.println("输入矩阵为:");
        for (int i = 0; i < num.length; i++) {
            for (int j = 0; j < num[i].length; j++) {
                System.out.print(num[i][j]+" ");
            }
            System.out.println();
        }
        for (int i=0;i<num.length;i++){
            for (int j=0;j<num[i].length;j++){
                if (i==0||i==num.length-1){
                    num[i][j]=0;
                }else if (j==0||j==num[i].length-1){
                    num[i][j]=0;
                }
            }
        }
        //遍历
        System.out.println("输出修改后的矩阵为:");
        for (int i = 0; i < num.length; i++) {
            for (int j = 0; j < num[i].length; j++) {
                System.out.print(num[i][j]+" ");
            }
            System.out.println();
        }
    }
}

5、定义一个34列的二维数组,逐个从键盘输入值,将左下三角的值清0。

import java.util.Scanner;

public class Subject05 {
    public static void main(String[] args) {
        //定义一个3行4列的二维数组,逐个从键盘输入值,将左下三角的值清0
        //声明数组
        int[][] num = new int[3][4];
        //声明Scanner类
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < num.length; i++) {
            for (int j = 0; j < num[i].length; j++) {
                System.out.print("请输入第" + (i + 1) + "行第" + (j + 1) + "列的数据");
                num[i][j] = sc.nextInt();
            }
            System.out.println();
        }
        //遍历
        System.out.println("输入的矩阵为:");
        for (int i = 0; i < num.length; i++) {
            for (int j = 0; j < num[i].length; j++) {
                System.out.print(num[i][j] + "\t");
            }
            System.out.println();
        }
        for(int i = 0;i < num.length;i++){
            for(int j = 0;j < num[i].length;j++){
                if(j<=i) {
                    num[i][j] = 0;
                }
            }
        }
        System.out.println("输出的矩阵为:");
        for (int i = 0; i < num.length; i++) {
            for (int j = 0; j < num[i].length; j++) {
                System.out.print(num[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

6、定义一个44列的二维数组,逐个从键盘输入值,将对角线的值清0。

import java.util.Scanner;

public class Subject06 {
    public static void main(String[] args) {
        //定义一个4行4列的二维数组,逐个从键盘输入值,将对角线的值清0
        //声明二维数组
        int[][] array=new int[4][4];
        //声明Scanner类
        Scanner sc=new Scanner(System.in);
        for (int i=0;i<array.length;i++){
            for (int j=0;j<array[i].length;j++){
                System.out.print("请输入第"+(i+1)+"行第"+(j+1)+"列的数据:");
                array[i][j]=sc.nextInt();
            }
            System.out.println();
        }
        //遍历
        System.out.println("输入的矩阵为:");
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if(i==j||i+j==3){
                    array[i][j]=0;
                }
            }
        }
        //再遍历
        System.out.println("输出的矩阵为:");
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
    }
}

7、定义一个N*N二维数组,从键盘上输入值,找出每行中最大值组成一个一维数组并输出。

import java.util.Arrays;
import java.util.Scanner;

public class Subject07 {
    public static void main(String[] args) {
        //定义一个N*N二维数组,从键盘上输入值,找出每行中最大值组成一个一维数组并输出;
        //声明Scanner类
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你想输入的元素个数:");
        int N=sc.nextInt();
        //声明二维数组
        int[][] array=new int[N][N];
        //输入数据
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print("请输入第"+(i+1)+"行第"+(j+1)+"列的元素:");
                array[i][j]=sc.nextInt();
            }
            System.out.println();
        }
        //遍历
        System.out.println("输入元素组成的数组为:");
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j]+"\t");
            }
            System.out.println();
        }
        //比较大小,声明装最大值的数组
        int[] newMax=new int[N];
        for (int i = 0; i < array.length; i++) {
            int max=array[i][0];
            for (int j = 0; j < array[i].length; j++) {
                if (max<array[i][j]){
                    max=array[i][j];
                }
            }
            newMax[i]=max;
        }
        System.out.println("最大元素组成的数组为:");
        System.out.println(Arrays.toString(newMax));
    }
}

8、从键盘上输入一个 3*4的整型数组,求出其中的最大值和最小值,并显示出。

import java.util.Scanner;

public class Subject08 {
    public static void main(String[] args) {
        //从键盘上输入一个 3*4 的整型数组,求出其中的最大值和最小值,并显示出
        //声明二维数组
        int[][] array=new int[3][4];
        //声明Scanner类
        Scanner sc=new Scanner(System.in);
        //输入数据
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print("请输入第"+(i+1)+"行第"+(j+1)+"列的元素");
                array[i][j]=sc.nextInt();
            }
            System.out.println();
        }
        //遍历
        System.out.println("整型数组为:");
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j]+"\t");
            }
            System.out.println();
        }
        //求最大值和最小值
        int max=array[0][0];
        int min=array[0][0];
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (max<array[i][j]){
                    max=array[i][j];
                }
                if (min>array[i][j]){
                    min=array[i][j];
                }
            }
        }
        System.out.println("数组最大值为:"+max+"\t"+"数组最小值为:"+min);

    }
}

9、有10个数字要求分别用选择法和冒泡法从大到小输出。

import java.util.Arrays;
import java.util.Scanner;

public class subject09 {
    public static void main(String[] args) {
        //有10个数字要求分别用选择法和冒泡法从大到小输出
        //声明数组
        int[] array=new int[10];
        //声明Scanner类
        Scanner sc=new Scanner(System.in);
        //输入数据
        for (int i=0;i<array.length;i++){
            System.out.print("请输入第"+(i+1)+"个数字:");
            array[i]=sc.nextInt();
        }
        System.out.println("输入的数组为:");
        System.out.println(Arrays.toString(array));
        //声明一个新数组用来存储原来的数组
        int[] arrays=new int[array.length];
        for (int i=0;i<array.length;i++){
            arrays[i]=array[i];
        }
        System.out.println("声明的新的数组为:");
        System.out.println(Arrays.toString(arrays));
        //冒泡排序
        System.out.println("***冒泡排序***");
        for (int i=0;i<array.length-1;i++){
            for (int j=0;j<array.length-1-i;j++){
                if (array[j]<array[j+1]){
                    int temp=array[j];
                    array[j]=array[j+1];
                    array[j+1]=temp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
        //选择法
        System.out.println("***选择法***");
        for (int i=0;i<arrays.length;i++){
            int index=0;
            int min=arrays[0];
            for (int j=0;j<arrays.length-i;j++){
                if (min>arrays[j]){
                    min=arrays[j];
                    index=j;
                }
            }
            int temp=arrays[arrays.length-i-1];
            arrays[arrays.length-i-1]=arrays[index];
            arrays[index]=temp;
        }
        System.out.println(Arrays.toString(arrays));

//        for (int i = 0; i < arrays.length; i++) {
//            int min = 0;
//            int temp = 0;
//            // 找出最大值索引,赋值给max
//            for (int j = 0; j < arrays.length - i; j++) {
//                if (arrays[j] < arrays[min]) {
//                    min = j;
//                }
//            }
//            // 将最大值和本次最后的项进行互换
//            temp = arrays[arrays.length - 1 -i];
//            arrays[arrays.length - 1 -i] = arrays[min];
//            arrays[min] = temp;
//        }System.out.println(Arrays.toString(arrays));
//    }
//        String end = "\n";
//        int index;
//        for (int i = 1;i < arrays.length;i++) {
//            index = 0;
//            for(int j = 1;j <= arrays.length-i;j++) {
//                if (arrays[j] > arrays[index]) {
//                    index = j;    // 查找最大值
//                }
//            }
//            end = arrays[index] + " " + end;    // 定位已排好的数组元素
//            int temp = arrays[arrays.length-i];
//            arrays[arrays.length-1] = arrays[index];
//            arrays[index] = temp;
//            System.out.print("【");
//            for (int j = 0;j < arrays.length-i;j++) {
//                System.out.print(arrays[j]+" ");
//            }
//            System.out.print("】"+end);
//        }
        }
    }


版权声明:本文为qq_72629130原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。