Java-每⽇编程练习题②(数组练习)
1.有⼀个已经排好序的数组。现输⼊⼀个数,要求按原来的规律将它插⼊数组中。
分析思路:
  先通过Random类随机创建⼀个数组,再调⽤Arrays类中的排序⽅法sort排好序,然后再开始实现功能。
  按原来的规律插⼊数组,很简单,只要到合适的插⼊位置n,然后将n之前的数组元素直接复制到新数组的对应位置,n处插⼊输⼊的数字,n之后的元素后移⼀格再移到新数组就完成了。
  最关键的就是要到合适的插⼊位置。⽽查算法显然⼆分查为优。这⾥我投了个懒,直接使⽤Arrays类中的⼆分查⽅法binarySearch()来查输⼊的num,若数组中存在和num⼀样的数,则该⽅法的返回值即为该数的下标位置,那么插⼊位置n就是这个返回值;⽽如果数组中不存在num,则该⽅法能够返回⼀个负数,num⽐数组第⼀个元素还⼩则为-1,此时插⼊位置应该为0,⼤于第⼀个元素⼩于第⼆个元素为-2,此时插⼊位置应为1,以此类推。。。那么显然插⼊位置应该为返回值取绝对值再减⼀。
  到位置实现就简单啦。具体代码如下:
1import java.util.Arrays;
2import java.util.Random;
3import java.util.Scanner;
4
5/**
6 * 有⼀个已经排好序的数组。现输⼊⼀个数,要求按原来的规律将它插⼊数组中。
7 *
8 * @author ChenZX
9 *
10*/
11public class Test03 {
12
13public static void main(String[] args) {
14        Random r = new Random();
15int[] arr = new int[10];
16for(int i=0;i<10;i++){    //随机⽣成数组
17            arr[i]= r.nextInt(100);
18        }
19        System.out.String(arr));
20        Arrays.sort(arr);  //排序
21        System.out.String(arr));
22
23        Scanner s = new Scanner(System.in);
24        System.out.println("请输⼊⼀个数:");
25int num = s.nextInt();
26        s.close();
27int bs =Arrays.binarySearch(arr, num); //⼆分查的结果存⼊bs
28int n = 0; //插⼊位置
29if(bs<0){            //查失败,则插⼊位置为bs的绝对值-1
30            n = Math.abs(bs)-1;
31        }else{        //查成功,则插⼊位置即bs
32            n = bs;
33        }
34        System.out.println(bs);
35
36int[] arr2 = new int[arr.length+1]; //建⽴⼀个新数组,长度为原数组长度+1
37for(int i=0;i<arr2.length;i++){
38if(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.String(arr2));
48    }
java数组字符串转数组49 }
2.求⼀个3*3矩阵对⾓线元素之和
分析思路:
  这是⼀道矩阵的编程实现题。Java中矩阵⼀般都是通过⼆维数组实现的。  具体代码如下:
1import java.util.Random;
2
3/**
4 * 求⼀个3*3矩阵对⾓线元素之和
5 *
6 * @author ChenZX
7 *
8*/
9public class Test04 {
10
11public static void main(String[] args) {
12int sum = 0; //和
13int[][] arr = new int[3][3];
14        Random r = new Random();
15for(int i=0;i<3;i++){    //随机⽣成矩阵
16for(int j=0;j<3;j++){
17                arr[i][j] = r.nextInt(10);  //0到9
18            }
19        }
20for(int i=0;i<3;i++){      //遍历矩阵
21for(int j=0;j<3;j++){
22                System.out.print(arr[i][j]+" ");  //打印矩阵元素
23if(i==j){  //如果为对⾓线元素
24                    sum += arr[i][j];  //求和
25                }
26            }
27            System.out.println(); //每输出3个元素换⾏
28        }
29        System.out.println("此矩阵对⾓线的和为:"+sum);
30    }
31 }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。