黑马程序员技术交流社区

标题: 关于数组中去掉重复元素的问题 [打印本页]

作者: lqy1991    时间: 2016-5-24 21:49
标题: 关于数组中去掉重复元素的问题
定义一个int类型的一维数组,如:{6,2,9,6,1,2,6,7,8},去除上面定义的数组中的重复元素,打印最终结果{6, 2, 9, 1, 7, 8}
作者: huxiaoyong888    时间: 2016-5-24 21:56
是吗,那很好啊
作者: 我有上将潘凤    时间: 2016-5-24 23:43
/*
        定义一个int类型的一维数组,如:{6,2,9,6,1,2,6,7,8},
        去除上面定义的数组中的重复元素,打印最终结果{6, 2, 9, 1, 7, 8}
*/
class Text1 {
        public static void main(String[] args) {
                int[] arr = {6,2,9,0,1,2,6,7,8,1,7,3,45,45,3,4};
                int count = 0;        //用来记录重复数字的次数
               
                //外面两个循环是用arr[i]分别和它后面的数比较
                m:for (int i = 0;i<arr.length;i++) {               
                        for (int j = i+1;j<arr.length ;j++) {
                                //该循环用来判断当arr[i]的数字与前面的一样就不比较了,跳过
                                //如arr[3] = arr[0] = 6,这时候arr[3]就不用去跟后面的数比较了
                                        for (int k = 0;k<i ;k++ ) {               
                                        if (arr[i] == arr[k]) {
                                                continue m;
                                        }
                                }
                                //出现相同的情况则count加一
                                if (arr[i] == arr[j]) {
                                        count++;
                                }
                        }
                }
                //定义一个数组来接收不重复的数字,之前数组的长度减去重复的次数就是
                //新数组的长度。
                int[] newArr = new int[arr.length-count];
                //定义一个初始索引
                int index = 0;

                n:for (int i = 0;i<arr.length;i++ ) {
                        //这个循环的意思是当arr[i]的值与数组newArr中已经
                        //被赋过值的元素就不要往下走了,以免重复赋值。
                        //如newArr[0]赋值后为6,所以当走到arr[6] = 6的时候
                        //就跳过,不往下执行赋值操作
                        for (int j = 0;j<index;j++) {
                                if (arr[i] == newArr[j]) {
                                        continue n;
                                }
                        }
                        //这里就是为newArr数组元素赋值的地方
                        //每赋值一次索引加一
                        newArr[index] = arr[i];
                        index++;
                }

                for (int i = 0;i<newArr.length ;i++ ) {
                        System.out.println(newArr[i]);
                }
        }
}
作者: 644313561    时间: 2016-5-25 23:31
谢谢楼上大神!
作者: chenshaohua    时间: 2016-5-26 17:50
public class Test02 {         public static void main(String[] args) {                 int[] arr = {6,2,9,6,1,2,6,7,8};                 arr = getSingleArr(arr);                 System.out.println(Arrays.toString(arr));                                  System.out.println("==============");                 int[] arr2 = new int[]{6,2,9,6,1,2,6,7,8};                 System.out.println(printArr(arr2));         }         //数组去重的方法         public static int[] getSingleArr(int[] arr) {                 //index表示既能表示当前存入数据在新数组中的位置,又能表示存数新数组中的数据的个数                 int index = 0;                 //1.定义一个和老数组长度相同的数组                 int[] newArr = new int[arr.length];                 //2.遍历老数组的内容                 for(int i = 0;i<arr.length;i++) {                         //3.定义flag标记,表示新数组中是否包含当前遍历到的老数组内容                         boolean flag = false;                         //4.遍历新数组,查看是否包含老数组中的当前元素,如果不包含,flag置为true                         for (int j = 0;j<newArr.length;j++) {                                 if (arr[i] == newArr[j]) {                                         flag = true;                                         break;                                 }                         }                         //5.flag为false时说明新数组中不包含当前遍历的老数组的内容,并将当前遍历的老数组的元素存入新数组中                         if (!flag) {                                 newArr[index++] = arr[i];                         }                 }                 //return Arrays.copyOf(newArr, index);                 //6.去除新数组中的无效的元素                 //7.定义一个需要返回给调用者的数组returnArr,该数组的长度为index                 int[] returnArr = new int[index];                 //8.将新数组中的index个元素存入returnArr数组中,并将该数组返回                 for(int i=0;i<index;i++) {                         returnArr[i] = newArr[i];                 }                 return returnArr;         }         //自定义打印数组的方法prinArr,格式{6, 2, 9, 1, 7, 8}         public static String printArr(int[] arr) {                 //1.如果arr==null,直接返回"null"                 if(null == arr) {                         return "null";                 }                 //2.如果数组的长度为0,直接返回"[]"                 int maxLength = arr.length-1;                 String s = "";                 if(-1==maxLength) {                         return "[]";                 }                 //3.遍历数组元素将数组封装成"[6, 2, 9, 1, 7, 8]"格式                 s+="{";                                 for(int index = 0;;index++ ) {                         s+=arr[index];                         if(index==maxLength)                                 return s+"}";                         s+=", ";                 }         } }
作者: 729524251    时间: 2016-5-27 12:37
膜拜大神
作者: wangzifei    时间: 2016-5-27 13:04
加油!
作者: 坂田银时    时间: 2016-5-27 13:25
来学习了
作者: 小菜鸟。    时间: 2016-5-27 14:03
学习到了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2