## Java編程那些事兒46—數組使用示例2
鄭州游戲學院 陳躍峰
出自:[http://blog.csdn.net/mailbomb](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下標的元素即可。
- 前言
- (1)序言
- (2)程序設計是什么?
- (3)你適合學習程序設計嗎?
- (4)如何學好程序設計?
- (5)程序設計介紹小結
- (6)計算機軟件基本概念
- (7)進制的概念
- (8)計算機內部的數據表達
- (9)網絡編程基礎
- (10)Java語言簡介
- (11)JDK的獲得、安裝和配置
- (12)第一個HelloWorld程序
- (13)Eclipse基本使用
- (14)Eclipse基礎使用進階
- (15)如何學好Java語法
- (16)代碼框架、關鍵字和標識符
- (17)基本數據類型
- (18)變量和常量
- (19)數據類型轉換
- (20)空白、語句結束和注釋
- (21)算術運算符
- (22)比較運算符
- (23)邏輯運算符
- (24)賦值運算符
- (25)位運算符
- (26)移位運算符
- (27)其它運算符
- (28)運算符優先級
- (29)表達式
- (30)流程控制基礎
- (31)if語句語法(1)
- (32)if語句語法(2)
- (33)if語句語法(3)
- (34)switch語句語法
- (35)while語句語法
- (36)do-while語句語法
- (37)for語句語法
- (38)break和continue語句
- (39)流程控制綜合示例1
- (40)流程控制綜合示例2
- (41)流程控制綜合示例3
- (42)流程控制綜合練習
- (43)數組概述
- (44)數組基礎語法
- (45)數組使用示例1
- (46)數組使用示例2
- (47)數組使用示例3
- (48)多維數組基礎
- (49)多維數組使用示例1
- (50)多維數組使用示例2
- (51)多維數組練習
- (52)方法聲明
- (53)方法聲明示例
- (54)方法調用
- (55)方法重載和參數傳遞
- (56)方法練習
- (57)面向對象基礎
- (58)類(一)
- (59)類(二)
- (60)對象
- (61)面向對象設計方法和面向對象特性(一)
- (62)繼承(二)
- (63)多態性
- (64)訪問控制符、修飾符和其它關鍵字
- (65)static修飾符
- (66)final修飾符
- (67)this和super
- (68)抽象類和接口(一)
- (69)抽象類和接口(二)
- (70)抽象類和接口(三)
- (71)內部類簡介
- (72)包的概念
- (73)JDK文檔使用
- (74)java.lang包介紹1
- (75)String類使用
- (76)StringBuffer類和System類
- (77)包裝類
- (78)時間和日期處理
- (79)Random隨機處理
- (80)集合框架簡述
- (81)異常處理概述
- (82)異常處理語法1
- (83)異常處理語法2
- (84)IO簡介
- (85)IO類體系
- (86)文件操作之File類使用
- (87)文件操作之讀取文件
- (88)文件操作之寫文件
- (89)讀取控制臺輸入
- (90)裝飾流使用1
- (91)裝飾流使用2
- (92)IO使用注意問題
- (93)多線程基礎
- (94)多線程實現方式1
- (95)多線程實現方式2
- (96)多線程使用示例1
- (97)多線程使用示例2
- (98)多線程問題及處理1
- (99)多線程問題及處理2
- (100)多線程問題及處理3
- (101)網絡編程概述
- (102)網絡編程技術1
- (103)網絡編程技術2
- (104)網絡編程技術3
- (105)網絡編程技術4
- (106)網絡編程技術5
- (107)網絡協議概念
- (108)網絡編程示例1
- (109)網絡編程示例2
- (110)網絡編程小結