1. 程式人生 > >Java-每日編程練習題②(數組練習)

Java-每日編程練習題②(數組練習)

取絕對值 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-每日編程練習題②(數組練習)