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


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 Test03 { 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 Test04 { 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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM