一、將一個給定的整型數組轉置輸出,
例如: 源數組,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] + " "); } }
運行結果: