A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区


从网上找到一份编程练习题,我决定将里面的题目全都做一遍。

/*
        题目:用随机数对象产生0---1000范围内的不同整数,用以初始化一个M*N的二维数组(M*N<100),
        然后编程找出二维数组中的最大数和最小数,并将其交换位置。
        要求输出原始二维数组及交换后的二维数组。
*/
import java.util.Random;
import java.util.Scanner;

class SuiJiShuZu {

        public static void main(String[] args) {
               
                Scanner sc=new Scanner(System.in);
                int m=0;
                int n=0;
                //获取输入,并检查非法值
                while(true){
                        System.out.println("请输入M和N:(M*N<100)");
                        m=sc.nextInt();
                        n=sc.nextInt();       
                        if (m*n<=0 || m*n>=100){
                                System.out.println("您的输入不合法!");
                                continue;
                        }       
                        break;
                }
                //定义数组
                int[][] arr=new int[m][n];
                //初始化数组
                initArray(arr);
                System.out.println("-------原始数组------");
                //打印原始数组
                printArray(arr);
                System.out.println("-------最值角标------");
                //获得最大值和最小值角标,并交换两值
                handleArray(arr);
                System.out.println("-----转换后的数组----");
                //打印交换后的数组
                printArray(arr);
        }

        //初始化数组
        public static void initArray(int[][] arr){
                Random r=new Random();
                r.setSeed(System.currentTimeMillis()); //置随机数种子
                for (int i=0; i<arr.length; i++){
                        for (int j=0; j<arr.length; j++){
                                arr[j]=r.nextInt(1000);
                        }
                }
        }

        //打印数组
        public static void printArray(int[][] arr){
                for (int i=0; i<arr.length; i++){
                        for (int j=0; j<arr.length; j++){
                                System.out.print(arr[j]+"\t");
                        }
                        System.out.println();
                }
        }
       
        //获得最大值和最小值,交换两个值
        public static void handleArray(int[][] arr){
                int max_row=0; //记录最大值的行角标
                int max_col=0; //记录最大值的列角标
                int min_row=0; //记录最小值的行角标
                int min_col=0; //记录最小值的列角标
                int max=arr[max_row][max_col];
                int min=arr[min_row][min_col];
                for (int i=0; i<arr.length; i++){
                        for (int j=0; j<arr.length; j++){
                                if (arr[j]>max){
                                        max=arr[j];
                                        max_row=i;
                                        max_col=j;
                                }
                                if (arr[j]<min){
                                        min=arr[j];
                                        min_row=i;
                                        min_col=j;
                                }
                        }
                }
                System.out.println("最大值角标为: ["+max_row+","+max_col+"]---最大值为: "+arr[max_row][max_col]);
                System.out.println("最小值角标为: ["+min_row+","+min_col+"]---最小值为: "+arr[min_row][min_col]);
                //交换最值
                swap(arr,max_row,max_col,min_row,min_col);
        }

        //交换二维数组中的数据
        public static void swap(int[][] arr,int x,int y,int a,int b){
                int temp=arr[x][y];
                arr[x][y]=arr[a];
                arr[a]=temp;
        }
}

/*
        请输入M和N:(M*N<100)
        10 9
        -------原始数组------
        804     831     410     978     97      921     908     399     848
        986     685     352     888     697     427     431     324     659
        526     870     72      155     571     408     184     719     77
        664     645     877     977     191     725     525     316     139
        950     928     707     619     478     758     878     679     2
        718     226     460     57      62      163     630     565     426
        610     757     909     273     560     962     770     819     623
        3       708     630     865     274     855     960     104     276
        696     303     561     957     222     140     886     304     455
        278     470     708     496     547     906     835     56      137
        -------最值角标------
        最大值角标为: [1,0]---最大值为: 986
        最小值角标为: [4,8]---最小值为: 2
        -----转换后的数组----
        804     831     410     978     97      921     908     399     848
        2       685     352     888     697     427     431     324     659
        526     870     72      155     571     408     184     719     77
        664     645     877     977     191     725     525     316     139
        950     928     707     619     478     758     878     679     986
        718     226     460     57      62      163     630     565     426
        610     757     909     273     560     962     770     819     623
        3       708     630     865     274     855     960     104     276
        696     303     561     957     222     140     886     304     455
        278     470     708     496     547     906     835     56      137

*/

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马