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小时内删除。
发表评论