第一種方法(只學到數組的看):
定義一個新的數組長度和舊數組的長度一樣,存儲除去重復數據的舊數組的數據和0,
public static void main(String[] args) { // 獲取一個無重復元素的數組 int[] arr = new int[] { 11, 22, 22, 33, 44, 55, 44, 66, 66, 66 }; // 先確定新數組的長度 int[] newArr = new int[arr.length]; int index = 0; // 新數組存儲元素索引(或者說無重復的個數) outer: for (int i = 0; i < arr.length; i++) { for (int j = i + 1; j < arr.length; j++) { //當數據重復時,跳出外圈循環 if (arr[i] == arr[j]) { continue outer; } } // 后面沒有與當前元素重復的值,保存這個數 newArr[index] = arr[i]; index++; } // 新數組中存儲着無重復的值和后面一些無效的0 int[] result = new int[index]; for (int i = 0; i < index; i++) { // 遍歷有效值個數 result[i] = newArr[i]; } System.out.println(Arrays.toString(result)); }
第二中方法:
一個一個刪除,有一個刪一個. 把數組中的一個數據和其他數據進行比較,如果有一個重復時,就直接開始創建新數組把重復的元素去除,並重新賦給舊數組
1 /* 2 * 一個一個刪除,有一個刪一個. 3 * 把數組中的一個數據和其他數據進行比較,如果有一個重復時,就直接開始創建新數組把重復的元素去除,並重新賦給舊數組 4 */ 5 6 public static void main(String[] args) { 7 8 int[] arr = { 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; 9 10 for (int i = 0; i < arr.length; i++) { 11 12 for (int j = i + 1; j < arr.length; j++) { 13 14 if (arr[i] == arr[j]) { 15 // return返回的數字的地址而非數組的數值(不懂的華看一下變量的 名 和所代表的數據地址的關系) 16 arr = aa(arr, j); 17 // 改變的數組中新數據頂替了覆蓋數組的就數據,所以還要重新比較一次 18 /* 19 * { 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; 下標 0 1 2 20 * 當下標為1被刪除了 ,下標2的數據補上 0 2 這個新元素還沒有被比較,所以要再比較一次,所以j-- 21 */ 22 j--; 23 } 24 } 25 } 26 27 for (int i = 0; i < arr.length; i++) { 28 System.out.println(arr[i]); 29 } 30 31 } 32 33 // 需要獲得舊數組和重復元素的下標,然后改成新數組並返回出來新數組 34 public static int[] aa(int[] arr, int index) { 35 36 // 新數組,沒發現一個就去除一個.所以長度-1 就行 37 int[] newArr = new int[arr.length - 1]; 38 // 因為就數組的下標要去除一個,又不知道那個,所以定義一個變量自增來當新數組的下標 39 int c = 0; 40 for (int i = 0; i < arr.length; i++) { 41 // 判斷傳進來的那個重復的下標和數組中的下標相等時,下標的元素就不用重新賦給新數組了 42 if (index != i) { 43 newArr[c] = arr[i]; 44 c++; 45 } 46 } 47 48 return newArr; 49 }
第三種方法;
相同的一起刪除,當發現相同的元素,先統計重復的個數,然后一起刪掉,得到新數組賦給舊數組
1 /* 相同的一起刪除,當發現相同的元素,先統計重復的個數,然后一起刪掉,得到新數組賦給舊數組 */ 2 3 public static void main(String[] args) { 4 5 int[] arr = { 8, 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; 6 7 arr = a2(arr); 8 9 for (int i = 0; i < arr.length; i++) { 10 System.out.println(arr[i]); 11 } 12 } 13 14 public static int[] a2(int[] arr) { 15 16 int a = 0; 17 18 for (int i = 0; i < arr.length - 1; i++) { 19 20 for (int j = i; j < arr.length - 1; j++) { 21 22 // 如果有相同的,就統計出相同元素的個數 23 if (arr[i] == arr[j + 1]) { 24 a += 1; 25 } 26 } 27 if (a != 0) { 28 // return返回的數字的地址而非數組的數值(不懂的華看一下變量的 名 和所代表的數據地址的關系) 29 arr = a1(arr, arr[i], a); 30 // 一個元素個數獲得到,統計變量清零,等待回去下一個元素重復的個數 31 a = 0; 32 } 33 } 34 return arr; 35 } 36 37 // 刪除里面重復的元素 38 public static int[] a1(int[] arr, int arr2, int a) { 39 // 因為就數組的下標要去除一個,又不知道那個,所以定義一個變量自增來當新數組的下標 40 int c = 1; 41 // 獲得新數組的長度,就是舊數組減去元素重復的次數 42 int[] aa = new int[arr.length - a]; 43 // 重復的元素也要保留一個 44 aa[0] = arr2; 45 for (int i = 0; i < arr.length; i++) { 46 // 不與重復元素相同的元素都非給新數組 47 if (arr2 != arr[i]) { 48 aa[c++] = arr[i]; 49 } 50 } 51 return aa; 52 }