A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Kingchen 中级黑马   /  2016-5-26 22:13  /  460 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Kingchen 于 2016-5-27 22:11 编辑

/*
分析以下需求,并用代码实现:(目前数组操作完成,学完集合使用集合完成)
        (1)定义一个int类型的一维数组,内容为{6,2,9,6,1,2,6,7,8}
        (2)去除上面定义的数组中的重复元素,打印最终结果{6, 2, 9, 1, 7, 8}
*/
import java.util.Arrays;//导入类
class Test2{
        public static void main(String[] args){
                int[] arr = {6,2,9,6,1,2,6,7,8};
                System.out.println("含重数组是:"+Arrays.toString(arr));        
                arr = getSingleArray(arr);
                System.out.println("去重数组是:"+Arrays.toString(arr));
        }

        //数组去重的方法
        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;//如果有重复的数,则标记为true
                        //4.遍历新数组,查看是否包含老数组中的当前元素,如果不包含,flag置为true
    for (int j=0; j<newArr.length; j++){
                                /*第一次拿出老数组的第一个元素和新数组的元素挨个比较,如果有重复的值则将
                                  flag标记为false,并且跳出for循环,没必要和newArr数组的元素进行比较了
                                */
                                if (arr==newArr[j]){//
                                        flag = true;
                                        break;
                                }
                        }
                        /*5.flag为false时说明新数组中不包含当前遍历的老数组的内容,
                        并将当前遍历的老数组的元素存入新数组中*/
                        if (!flag){        //当flag为false是执行,falg为true不会执行,非true即false,就不会执行if里面的内容
                                newArr[index++] = arr;
           }
                }
                //完成以上步骤可以将重复的元素去掉,但是数组的长度并没有改变,剩下的含有0
                /*
                        例如:未去重的数组[6, 2, 9, 6, 1, 2, 6, 7, 8]
                                  去重后的数组[6, 2, 9, 1, 7, 8, 0, 0, 0]
                        所以应该把0去掉,前面的index已经记录了数组的有效长度
                */
                int[] returnArr = new int[index];
                //将去重数组的元素赋值给返回数组
                for (int i=0; i<index; i++){
                        returnArr = newArr;
                }
                //最后将数组返回
                return returnArr;
        }
}

/*
        方法中new出来的数组也是存储在堆内存中
        arr = getSingleArr(arr);
        是将arr指向了一块新的内存,所以数组的长度变化了。
*/

6 个回复

倒序浏览
希望大家多多指教!
回复 使用道具 举报
与视频说的ArrayList 去除重复  也是建一个新的集合   把不重复放进去  然后再放回原集合
回复 使用道具 举报
顶贴走人
回复 使用道具 举报
回复 使用道具 举报
{:2_34:}{:2_34:}
回复 使用道具 举报
厉害。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马