Java編程那些事兒46—數組使用樣本2鄭州遊戲學院 陳躍峰出自:http://blog.csdn.net/mailbomb
6.3.4 判斷數組元素是否重複 要求:判斷一個數組中是否存在相同的元素,如果存在相同的元素則輸出“重複”,否則輸出“不重複”。 該題中如果需要判斷數組中元素是否重複,則需要對數組中的元素進行兩兩比較,如果有任意一組元素相等,則該數組中的元素存在重複,如果任意一組元素都不想等,則表示數組中的元素不重複。 實現思路:假設數組中的元素不重複,兩兩比較數組中的元素,使用數組中的第一個元素和後續所有元素比較,接著使用數組中的第二個元素和後續元素比較,依次類推實現兩兩比較,如果有一組元素相同,則數組中儲存重複,結束迴圈。把比較的結果儲存在一個標誌變數裡,最後判斷標誌變數的值即可。 則實現的代碼如下: int[] n = {1,2,3,1,0}; boolean flag = true; //假設不重複 for(int i = 0;i < n.length – 1;i++){ //迴圈開始元素 for(int j = i + 1;j < n.length;j++){ //迴圈後續所有元素 //如果相等,則重複 if(n[i] == n[j]){ flag = false; //設定標誌變數為重複 break; //結束迴圈 } } } //判斷標誌變數 if(flag){ System.out.println(“不重複”); }else{ System.out.println(“重複”); } 在該代碼中,flag變數儲存是否重複,true代表不重複,false代表重複。外部迴圈中迴圈變數i代表第一個元素的下標,內部迴圈中迴圈變數j代表後續元素的下標,當i為零時和後續所有元素比較,然後當i為1時也和後續所有元素比較,依次類推,這樣實現所有元素之間的兩兩比較。然後如果元素相同,則代表有重複,把flag變數的值置成flase,結束迴圈。最後根據flag變數的值就可以判斷是否重複了。
6.3.5 判斷數組是否對稱 要求:判斷數組元素是否對稱。例如{1}、{1,2,0,2,1},{1,2,3,3,2,1}這樣的都是對稱數組。 該題中用於判斷數組中的元素關於中心對稱,也就是說數組中的第一個元素和最後一個元素相同,數組中的第二個元素和倒數第二個元素相同,依次類推,如果比較到中間,所有的元素都相同,則數組對稱。 實現思路:把數組長度的一半作為迴圈的次數,假設變數i從0迴圈到數組的中心,則對應元素的下標就是數組長度-i-1,如果對應的元素有一組不相等則數組不對稱,如果所有對應元素都相同,則對稱。 則實現的代碼如下: int[] n = {1,2,0,2,1}; boolean flag = true; //假設對稱 for(int i = 0;i < n.length/2;i++){ //迴圈數組長度的一半次 //比較元素 if(n[i] != n[n.length – i – 1]){ flag = false; //不對稱 break; //結束迴圈 } } if(flag){ System.out.println(“對稱”); }else{ System.out.println(“不對稱”); } 在該代碼中,flag作為標誌變數,值為true代表對稱,false代表不對稱,因為是兩兩比較,只需要比較數組的長度一半次即可,如果對應的元素不相同則數組不對稱,結束迴圈。最後判斷標誌變數的值,就可以獲得數組是否對稱了。
6.3.6 數制轉換 要求:將十進位數字轉換為位元字。 在前面介紹過,十進位數字轉換為位元字時一般使用除二取餘法,該方法很規則,在程式中可以通過迴圈實現,在程式中只需要把得到的數字儲存起來即可。 實現思路:將除二取餘得到的第一個數字儲存在數組中第一個元素,第二次得到的餘數儲存在數組中第二個元素,依次類推,最後反向輸出獲得的數字即可。 實現代碼如下: int n = 35; int[] m = new int[32]; //拆分數字 int num = 0; while(n != 0){ m[num] = n % 2; //儲存餘數 num++; //拆分數字增加1 n /= 2; //去掉餘數 } //輸出拆分後的數字 for(int i = num - 1;i >= 0;i--){ System.out.print(m[i]); } System.out.println(); 在該代碼中,因為int是32位的,所以最多需要長度是32的數組即可。在儲存時把拆分出的第一個數字,也就是二進位的低位,儲存在數組的第一個元素,num代表拆分出的數位個數以及數組下標,一直拆分到n的值為零時結束。迴圈結束後,因為拆分出來的數字個數是num,所以只需要反向輸出數組中0到num-1下標的元素即可。