一、基本思路
首先,假设一个一维数组arr[ ]={ 4, 3, 35, 3, 2, 4, 6, 3},其中有三个重复元素 3,4,3。要如何剔除呢,由于还没有涉猎到一些经典的调用,所以我选择了用新的数组newArr[ ]去继承原来数组中的不重复的元素,另外还需要一个判断数组Arr[ ],来判断arr[ ]中哪几个元素是重复的,才好去除掉。
二、步骤
1.设置判断数组Arr[ ]
代码如下(示例):
1
2
3
4
5
6
7
8
9
10
11
12
|
int [] arr = { 4 , 3 , 35 , 3 , 2 , 4 , 6 , 3 }; int [] Arr = new int [arr.length]; for ( int i = 0 ; i < arr.length- 1 ; i++) { for ( int j = i + 1 ; j < arr.length; j++) { if (arr[i] == arr[j]) { Arr[j] = 1 ; //把Arr中元素下标和arr中元素下标一致的元素,赋值为1,来标记判断重复元素的位置(下标) } } }` // //测试一下相同元素的位置 for ( int i = 0 ; i < Arr.length; i++) { System.out.print(Arr[i]); |
初始化一个长度和arr相同的数组Arr={0,0,0,0,0,0,0,0},用两层嵌套for循环来判断各重复元素:外层循环控制比较轮数,内层循环控制不同的两个元素之间的比较。(其实总体过程就是首先第一个元素和后面比较是否重复,然后第二轮是从第二个元素开始依次和右边剩下的各个元素开始比较,第三轮…第n轮…
eg: i=0时,进入外层循环,第一轮比较:以arr[i]=arr[0]=4为基准开始比较,
进入内层循环,再进行比较:
(1)arr[j]=arr[i+1]=arr[1]=3,3!=4,不重复,
(2)arr[j+1]=arr[i+2]=arr[2]=35,35!=4,不重复,
(3)arr[j+2]=arr[i+3]=arr[3]=3, 3!=4,不重复 ,
(4)arr[j+3]=arr[i+4]=arr[4]=2, 2!=4,不重复 ,
(5)arr[j+4]=arr[i+5]=arr[5]=4, 4==4,重复 ,
…
此时找到了一个重复的元素4,然后同样的
i=1时,以arr[i]=arr[1]=3为基准进入第二轮比较,可以找到重复元素arr[3]=3,arr[7]=3,都是重复元素
i=…时,一直重复arr.length(数组的长度)轮比较,最终找出重复元素只有三个,就是3,4,3。
注意到: // //测试一下相同元素的位置
for (int i = 0; i < Arr.length; i++) {
System.out.print(Arr[i]);
其实这一步不必要,但是为了直观显示出重复元素的位置,我输出了判断数组Arr,输出结果是 0 0 0 1 0 1 0 1,很清晰的看出原数组arr中哪三个位置的元素重复了的
2.继承数组newArr[ ]获取不重复元素
就是剔除重复元素的步骤
1
2
3
4
5
6
7
8
|
System.out.println(); int count = 0 ; for ( int i = 0 ; i < Arr.length; i++) { if (Arr[i] == 0 ) { count++; } System.out.println( "不重复元素的个数有" + count + "个" ); int [] newArr = new int [count]; |
(1)遍历判断数组Arr[ ],遍历到0元素的时候,计数器count+1,count数就是不重复元素个数,就是继承数组newArr[ ]的长度。
(2) 设置计数器 index 初始化=0,for循环遍历判断数组Arr[ ],通过if条件语句。如果Arr[ ]=0,说明在该位置下的原数组元素是不重复的,则执行newArr[index++] = arr[i];(把原数组中不重复的元素继承给newArr)
1
2
3
4
5
6
7
8
9
|
int index = 0 ; for ( int i = 0 ; i < Arr.length; i++) { if (Arr[i] == 0 ) { newArr[index++] = arr[i]; } } for ( int i = 0 ; i < newArr.length; i++) { System.out.print(newArr[i] + " " ); } |
(3)for循环遍历继承数组newArr[ ],输出结果就是去除重复元素后的最终结果。
总结
关键词 :
判断数组Arr[ ]:判断数组中重复元素的位置(下标)。
继承数组newArr[ ]:继承去掉重复元素后剩下不重复的数组元素。
(以上两个数组都是我自己方便理解取的名字)
以上就是我要介绍的全部内容,由于水平有限难免会有纰漏,希望能帮助到大家,大佬们欢迎批评指正。
附上完整代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
public class Array { public static void main(String[] args) { int [] arr = { 4 , 3 , 35 , 3 , 2 , 4 , 6 , 3 }; int [] Arr = new int [arr.length]; //<arr.length-1防止数组越界 for ( int i = 0 ; i < arr.length- 1 ; i++) { for ( int j = i + 1 ; j < arr.length; j++) { if (arr[i] == arr[j]) { Arr[j] = 1 ; } } } // //测试一下相同元素的位置 for ( int i = 0 ; i < Arr.length; i++) { System.out.print(Arr[i] + " " ); } System.out.println(); int count = 0 ; for ( int i = 0 ; i < Arr.length; i++) { if (Arr[i] == 0 ) { count++; } } System.out.println( "不重复元素的个数" + count); int [] newArr = new int [count]; int index = 0 ; for ( int i = 0 ; i < Arr.length; i++) { if (Arr[i] == 0 ) { newArr[index++] = arr[i]; } } System.out.println( "去除掉重复元素后的数组:" ); for ( int i = 0 ; i < newArr.length; i++) { System.out.print(newArr[i] + " " ); } } } |
输出结果:
以上就是java学习之一维数组中重复元素的去除的详细内容,更多关于java一维数组的资料请关注服务器之家其它相关文章!
原文链接:https://blog.csdn.net/qq_51964402/article/details/115607489