Java范例集锦(四)
范例1. 对矩陈进行转置运算
所谓对矩陈的转置就是将矩陈的行列互换。示例代码如下:
public class ArrayRowColumnSwap { public static void main(String[] args) { // TODO Auto-generated method stub int arr[][]=new int[][]{{10,11,12},{20,21,22},{30,31,32}}; //创建二维数组 System.out.println("******转置前的矩陈是:******"); printArray(arr); //输出二维数组 int arr2[][]=new int[arr.length][arr.length]; for(int i=0; i<arr.length;i++) { //调整数组行列数据 for(int j=0;j<arr[i].length;j++) { arr2[j][i]=arr[i][j]; } } System.out.println("******转置后的矩陈是:******"); printArray(arr2); } 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[i][j]+"\t"); } System.out.println(); } } }
其执行结果如下:
******转置前的矩陈是:****** 10 11 12 20 21 22 30 31 32 ******转置后的矩陈是:****** 10 20 30 11 21 31 12 22 32
范例2. 求方陈的迹
方陈的迹,即方陈主对角线上所有元素的和。示例代码如下:
public class Trace { public static void main(String[] args) { // TODO Auto-generated method stub int arr[][]= { //创建二维数组 {5,10,15,20}, {10,15,20,25}, {15,20,25,30}, {20,25,30,35} }; int tr=0; System.out.println("********方陈arr[][]是:********"); for(int i=0;i<arr.length;i++) { //遍历数组 for(int j=0;j<arr[i].length;j++) { System.out.print(arr[i][j]+"\t"); } System.out.println(); } for(int i=0;i<arr.length;i++) { tr+=arr[i][i]; } System.out.println("方陈arr[][]的迹是:"+tr); } }
执行结果是:
********方陈arr[][]是:********
5 10 15 20
10 15 20 25
15 20 25 30
20 25 30 35
方陈arr[][]的迹是:80
范例3. 遍历数组
3.1. 遍历一
public class GetDay { public static void main(String[] args) { // TODO Auto-generated method stub int day[]= {31,28,31,30,31,30,31,31,30,31,30,31}; //创建并初始化一维数组 for(int i=0;i<day.length;i++) { //利用fou循环将信息输出 System.out.print((i+1)+"月有"+day[i]+"天"+"\t\t"); if((i+1)%3==0) { //如果i+1之和求余为零 System.out.print("\n"); //输出回车 } } } }
执行结果显示如下:
1月有31天 2月有28天 3月有31天
4月有30天 5月有31天 6月有30天
7月有31天 8月有31天 9月有30天
10月有31天 11月有30天 12月有31天
3.2. 遍历二维数组,示例代码如下:
public class Trap { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("*****利用for循环遍历二维数组*****"); int arr[][]=new int[][] { {10,20}, {12,13,14,15,16}, {17,18,19} }; //创建二维数组 for(int i=0;i<arr.length;i++) { for(int j=0;j<arr[i].length;j++) { //遍历二维数组中的每个元素 System.out.print(arr[i][j]+" "); } System.out.println(); } System.out.println("*****使用foreach语句遍历二维数组*****"); for(int[] x:arr) { //外层循环变量为一维数组 for(int y:x) { //循环遍历每一个数组元素 System.out.print(y+" "); } System.out.println(); } } }
执行结果为:
*****利用for循环遍历二维数组***** 10 20 12 13 14 15 16 17 18 19 *****使用foreach语句遍历二维数组***** 10 20 12 13 14 15 16 17 18 19
范例4. 使用直接插入法排序
public class InsertSort { public static void main(String[] args) { // TODO Auto-generated method stub int[] a=new int[] {12,33,23,78,20,98,28}; //创建数组并初始化 System.out.println("******排序前:******"); for(int i=0;i<a.length;i++) { //遍历数组元素 System.out.print(a[i]+" "); //输出数组元素 } int tmp; //定义临时变量 int j; for(int i=1;i<a.length;i++) { tmp=a[i]; //保存临时变量 for(j=i-1;j>=0&&a[j]>tmp;j--) { a[j+1]=a[j]; //数组元素互换 } a[j+1]=tmp; //在排序位置插入数据 } System.out.println("\n******排序后:******"); for(int i=0;i<a.length;i++) { System.out.print(a[i]+" "); } } }
执行结果为:
******排序前:****** 12 33 23 78 20 98 28 ******排序后:****** 12 20 23 28 33 78 98
范例5. 使用冒泡法排序
冒泡法排序的基本思路是对比相邻的元素值,如果满足条件就交换元素值,把较小的数移到数组前面,把大的元素移到数组后面。
冒泡排序其缺点是相较其他排序算法来讲就是效率不高。示例代码如下:
public class BubbleSort { public static void main(String[] args) { // TODO Auto-generated method stub int a[]=new int[] {12,33,23,46,78,9,18}; //声明并初始化一维数组 System.out.println("***********冒泡法排序的过程是:***********"); for(int i=1;i<a.length;i++) { System.out.print("第"+i+"次冒泡排序:"); for(int j=0;j<a.length-1;j++) { //比较相邻两个元素,较大的数往后面冒泡 if(a[j]>a[j+1]) { int tmp; tmp=a[j]; //把第一个元素值保持到临时变量中 a[j]=a[j+1]; //把第二个元素值保存到第一个元素中 a[j+1]=tmp; //把第一个元素原值保存到第二个元素中 } System.out.print(a[j]+" "); //输出排序后的数组元素 } System.out.print("["); for(int j=a.length-i;j<a.length;j++) { System.out.print(a[j]+" "); //输出排序后的元素 } System.out.print("]\n"); } System.out.println("*****输出冒泡排序后的结果:*****"); for(int x:a) { System.out.print(x+" "); } } }
执行后其结果是:
***********冒泡法排序的过程是:*********** 第1次冒泡排序:12 23 33 46 9 18 [78 ] 第2次冒泡排序:12 23 33 9 18 46 [46 78 ] 第3次冒泡排序:12 23 9 18 33 46 [33 46 78 ] 第4次冒泡排序:12 9 18 23 33 46 [23 33 46 78 ] 第5次冒泡排序:9 12 18 23 33 46 [18 23 33 46 78 ] 第6次冒泡排序:9 12 18 23 33 46 [12 18 23 33 46 78 ] *****输出冒泡排序后的结果:***** 9 12 18 23 33 46 78
范例6. 输出九宫格
九宫格的思想是,在一个三维方陈的九个元素中分别填入1~9个数,使得每一行、列和对角线上3个数的和都等于15。示例代码如下:
public class NineTable { public static void main(String[] args) { // TODO Auto-generated method stub int arr[][]=new int[3][3]; //创建一个3阶方陈 int a=2; //第三行的行下标 int b=1; //第2列的列下标 for(int i=1;i<=9;i++) { //给数组赋值 arr[a++][b++]=i; if(i%3==0) { //如果i求余为0 a-=2; b-=1; }else{ a=a%3; b=b%3; } } System.out.println("******输出九宫格:******"); for(int i=0;i<arr.length;i++) { for(int j=0;j<arr[i].length;j++) { System.out.print(arr[i][j]+"\t"); } System.out.println("\n"); } } }
执行结果为:
******输出九宫格:****** 4 9 2 3 5 7 8 1 6