Java-每日編程練習題②(數組練習)
阿新 • • 發佈:2019-04-25
取絕對值 exti dom 對角線 ray java 位置 system ont
1.有一個已經排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中。
分析思路:
先通過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 }
2.求一個3*3矩陣對角線元素之和
分析思路:
這是一道矩陣的編程實現題。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 }
Java-每日編程練習題②(數組練習)