Java-每日编程练习题②(数组练习)
1.有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
分析思路:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。先通过Random类随机创建一个数组,再调用Arrays类中的排序方法sort排好序,然后再开始实现功能。
按原来的规律插入数组,很简单,只要找到合适的插入位置n,然后将n之前的数组元素直接复制到新数组的对应位置,n处插入输入的数字,n之后的元素后移一格再移到新数组就完成了。
最关键的就是要找到合适的插入位置。而查找算法显然二分查找为优。这里我投了个懒,直接使用Arrays类中的二分查找方法binarySearch()来查找输入的num,若数组中存在和num一样的数,则该方法的返回值即为该数的下标位置,那么插入位置n就是这个返回值;而如果数组中不存在num,则该方法能够返回一个负数,num比数组第一个元素还小则为-1,此时插入位置应该为0,大于第一个元素小于第二个元素为-2,此时插入位置应为1,以此类推。。。那么显然插入位置应该为返回值取绝对值再减一。
找到位置实现就简单啦。具体代码如下:
1 import java.util.Arrays; 2 import java.util.Random; 3 import java.util.Scanner; 4
5 /**
6 * 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 7 * 8 * @author ChenZX 9 * 10 */
11 public class Test03 { 12
13 public static void main(String[] args) { 14 Random r = new Random(); 15 int[] arr = new int[10]; 16 for(int i=0;i<10;i++){ //随机生成数组
17 arr[i]= r.nextInt(100); 18 } 19 System.out.println(Arrays.toString(arr)); 20 Arrays.sort(arr); //排序
21 System.out.println(Arrays.toString(arr)); 22
23 Scanner s = new Scanner(System.in); 24 System.out.println("请输入一个数:"); 25 int num = s.nextInt(); 26 s.close(); 27 int bs =Arrays.binarySearch(arr, num); //二分查找的结果存入bs
28 int n = 0; //插入位置
29 if(bs<0){ //查找失败,则插入位置为bs的绝对值-1
30 n = Math.abs(bs)-1; 31 }else{ //查找成功,则插入位置即bs
32 n = bs; 33 } 34 System.out.println(bs); 35
36 int[] arr2 = new int[arr.length+1]; //建立一个新数组,长度为原数组长度+1
37 for(int i=0;i<arr2.length;i++){ 38 if(i<n){ //在插入位置之前的部分直接复制就行
39 arr2[i]=arr[i]; 40 }else if(i==n){ //将输入数字插入对应位置
41 arr2[i]=num; 42 }else{ //插入位置之后的数全部向后移动一格
43 arr2[i]=arr[i-1]; 44 } 45 } 46 System.out.println("插入数后的数组为:"); 47 System.out.println(Arrays.toString(arr2)); 48 } 49 }
2.求一个3*3矩阵对角线元素之和
分析思路:
这是一道矩阵的编程实现题。Java中矩阵一般都是通过二维数组实现的。
具体代码如下:
1 import java.util.Random; 2
3 /**
4 * 求一个3*3矩阵对角线元素之和 5 * 6 * @author ChenZX 7 * 8 */
9 public class Test04 { 10
11 public static void main(String[] args) { 12 int sum = 0; //和
13 int[][] arr = new int[3][3]; 14 Random r = new Random(); 15 for(int i=0;i<3;i++){ //随机生成矩阵
16 for(int j=0;j<3;j++){ 17 arr[i][j] = r.nextInt(10); //0到9
18 } 19 } 20 for(int i=0;i<3;i++){ //遍历矩阵
21 for(int j=0;j<3;j++){ 22 System.out.print(arr[i][j]+" "); //打印矩阵元素
23 if(i==j){ //如果为对角线元素
24 sum += arr[i][j]; //求和
25 } 26 } 27 System.out.println(); //每输出3个元素换行
28 } 29 System.out.println("此矩阵对角线的和为:"+sum); 30 } 31 }

更多精彩