Java中數組相關的一些題目


一、將一個給定的整型數組轉置輸出,

                例如: 源數組,1 2 3 4 5 6
                                     轉置之后的數組,6 5 4 3 2 1

                      在看到這道題時,我首先想到的是,創建一個新數組,通過數組下標把一個數組倒着放到另一個數組中,即int[] arr={1,2,3,4,5,6} int[]  arr1 = new int[6] ,arr1[0]=arr[5],代碼如下:                      

 1 //錯誤示例
 2 public class daozhi_Arrary {
 3     public static void main(String[] args) {
 4         int[] arr = {1, 2, 3, 4, 5, 6};
 5         int[] arr1 = new int[6];
 6         for (int i = 5; i >= 0; i--) {
 7             for (int j = 0; j <= 5; j++) {
 8                 arr1[j] = arr[i];
 9             }
10         }
11         for (int i = 0; i<=5;i++){
12             System.out.println(arr1[i]);
13         }
14     }
15 }

      寫完我發現運行結果和想象中的不太一樣,運行結果是:

                                           

                   然后我就在想,既然這樣不行,我以前學過C中的數組倒置,即在原數組中進行數據操作,過程就是折中取半不遍歷整個數組了遍歷一半,那么就/2就可以 ,但是計算機數數的方法是從0開始的也就是說最后一個值里面是沒有任何意義的 ,所以要在最后一個值那-1,且還要定義一個空的變量  因為要用到三步換值(變量) 不定義也可以。代碼實現如下;

public class daozhi2_array {
    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6};
        System.out.print("oldArry:");
        for(int i = 0;i < arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        for(int i=0;i < arr.length / 2;i++){  //折中取半
            int temp = arr[i];
            arr[i] = arr[arr.length - 1 -i]; //將數組中后面的數往前面換,也就是,arr[0] = arr[5],arr[1] = arr [4], arr [2]=arr[3],這樣就完成數組的倒置,方法更簡單
            arr[arr.length - 1 -i] = temp;
        }

        System.out.print("newArry:");
        for(int i = 0;i < arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }

運行結果:

         

然后我又在瞎想,能不能把這封裝在一個方法中,使用的時候調用它,我又做了一邊嘗試,代碼如下:

//代碼優化過后

class DaoXv {
    public void daozhi( int arr[],int size){
        for(int i=0;i < arr.length / 2;i++){  //折中取半
            int temp = arr[i];
            arr[i] = arr[arr.length - 1 -i]; //將數組中后面的數往前面換,也就是,arr[0] = arr[5],arr[1] = arr [4], arr [2]=arr[3],這樣就完成數組的倒置,方法更簡單
            arr[arr.length - 1 -i] = temp;
        }

        System.out.print("newArry:");
        for(int i = 0;i < arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }
}


public class daozhi2_array {
    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6};
        System.out.print("oldArry:");
        for(int i = 0;i < arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        DaoXv ax = new DaoXv();
        ax.daozhi(arr,6);
    }
}

 運行結果:

      

                   這樣當我每次需要數組倒置的時候只需調用方法,即可,心里美滋滋。至此,數組的導致算是告一段落了。(弊端:只能操作int類型的數組)

 

二、現在有如下的一個數組:int[] oldArr = {1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ;要求將以上數組中值為0的項去掉,將不為0的值存入一個新的數組,生成的新數組為:int[] newArr = {1,3,4,5,6,6,5,4,7,6,7,5} ;

        我在想,是否能通過if()條件語句進行判斷,通過if條件語句判斷if(oldArr[i]==0),就把他從數組中剔除出去,實現方法如下:

 1 public class deleat0_array {
 2     public static void main(String[] args) {
 3 
 4             int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
 5             int n=0; // 統計0的個數
 6             for(int i=0;i<oldArr.length;i++){
 7                 if(oldArr[i]==0){
 8                     n++;
 9                 }
10             }
11             int newArr[]=new int[oldArr.length-n]; // 定義新的數組 長度是 原來舊的數組的長度減去0的個數
12             int j=0; // 新數組的索引
13             for(int i=0;i<oldArr.length;i++){ // 遍歷原來舊的數組
14                 if(oldArr[i]!=0){ // 假如不等於0
15                     newArr[j]=oldArr[i]; // 賦值給新的數組
16                     j++;
17                 }
18             }
19         System.out.println("oldArry length:"+oldArr.length);
20         System.out.println("newArry length:"+newArr.length);
21         System.out.print("oldArry:");
22         for(int k=0;k<oldArr.length;k++){
23             System.out.print(oldArr[k]+" ");
24         }
25         System.out.println();
26             System.out.print("newArry:");
27             for(int k=0;k<newArr.length;k++){
28                 System.out.print(newArr[k]+" ");
29             }
30 
31     }
32 }                 

  我又在想,是否也能封裝在一個方法中,然后代碼如下:

 1 class DeleatMethod{
 2     public void method(int oldArr[],int size){
 3         int n=0; // 統計0的個數
 4         for(int i=0;i<oldArr.length;i++){
 5             if(oldArr[i]==0){
 6                 n++;
 7             }
 8         }
 9         int newArr[]=new int[oldArr.length-n]; // 定義新的數組 長度是 原來舊的數組的長度減去0的個數
10         int j=0; // 新數組的索引
11         for(int i=0;i<oldArr.length;i++){ // 遍歷原來舊的數組
12             if(oldArr[i]!=0){ // 假如不等於0
13                 newArr[j]=oldArr[i]; // 賦值給新的數組
14                 j++;
15             }
16         }
17         System.out.println("oldArry length:"+oldArr.length);
18         System.out.println("newArry length:"+newArr.length);
19         System.out.print("oldArry:");
20         for(int k=0;k<oldArr.length;k++){
21             System.out.print(oldArr[k]+" ");
22         }
23         System.out.println();
24         System.out.print("newArry:");
25         for(int k=0;k<newArr.length;k++){
26             System.out.print(newArr[k]+" ");
27         }
28 
29     }
30 }
31 
32 public class deleat0_array {
33     public static void main(String[] args) {
34 
35             int[] oldArr={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
36         DeleatMethod  dm= new DeleatMethod();
37         dm.method(oldArr,oldArr.length);
38     }
39 }

運行結果:

不出所料,能實現這種方法。

三、現在給出兩個數組:

                              數組a:"1,7,9,11,13,15,17,19"
                              數組b:"2,4,6,8,10"
                              兩個數組合並為數組c

public class hebing {

        public static void main(String args[]) {
            int a[] = { 1,7,9,11,13,15,17,19};
            int b[] = { 2,4,6,8,10};
            int m=a.length+b.length;
            int[] c = new int[m];
            int num = 0;       //定義一個標識,讓下一個數組賦值時可以知道上一個數組的長度,和從哪里開始賦值

            for (int i = 0; i < a.length; i++) {
                c[i] = a[i];
                num++;
            }
            for (int j = 0; j < b.length; j++) {
                c[num++] = b[j];
            }
            System.out.print("數組a:");
            for (int i = 0; i < a.length; i++){
                System.out.print(a[i]+"  ");
            }
            System.out.println();
            System.out.print("數組b:");
            for (int i = 0; i < b.length; i++){
                System.out.print(b[i]+"  ");
            }
            System.out.println();
            System.out.print("重組數組:");
            for (int i = 0; i < c.length; i++)
                System.out.print(c[i] + "  ");
        }


}

運行結果:

 


免責聲明!

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



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