从网上找到一份编程练习题,我决定将里面的题目全都做一遍。
/*
题目:用随机数对象产生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
*/
|
|