分析思路:
先通过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 Test30 {
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 }
分析思路:
这是一道矩阵的编程实现题。Java中矩阵一般都是通过二维数组实现的。
具体代码如下:
1 import java.util.Random;
2
3 /**
4 * 求一个3*3矩阵对角线元素之和
5 *
6 * @author ChenZX
7 *
8 */
9 public class Test29 {
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 }
原文:https://www.cnblogs.com/czxoy/p/10770567.html