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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梧桐树上的男人 中级黑马   /  2016-3-25 22:48  /  539 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个数组中有重复元素,再定义一个新数组把旧数组中的元素放到新数组中,但是不放重复的元素
这个算法怎么实现啊,求大神指教

7 个回复

倒序浏览
  1. public class Test02 {
  2.                                 public static void main(String[] args) {
  3.                                         int[] arr = {6,2,9,6,1,2,6,7,8};
  4.                                         arr = getSingleArr(arr);
  5.                                         System.out.println(Arrays.toString(arr));
  6.                                        
  7.                                         System.out.println("==============");
  8.                                         int[] arr2 = new int[]{6,2,9,6,1,2,6,7,8};
  9.                                         System.out.println(printArr(arr2));
  10.                                 }
  11.                                 //数组去重的方法
  12.                                 public static int[] getSingleArr(int[] arr) {
  13.                                         //index表示既能表示当前存入数据在新数组中的位置,又能表示存数新数组中的数据的个数
  14.                                         int index = 0;
  15.                                         //1.定义一个和老数组长度相同的数组
  16.                                         int[] newArr = new int[arr.length];
  17.                                         //2.遍历老数组的内容
  18.                                         for(int i = 0;i<arr.length;i++) {
  19.                                                 //3.定义flag标记,表示新数组中是否包含当前遍历到的老数组内容
  20.                                                 boolean flag = false;
  21.                                                 //4.遍历新数组,查看是否包含老数组中的当前元素,如果不包含,flag置为true
  22.                                                 for (int j = 0;j<newArr.length;j++) {
  23.                                                         if (arr[i] == newArr[j]) {
  24.                                                                 flag = true;
  25.                                                                 break;
  26.                                                         }
  27.                                                 }
  28.                                                 //5.flag为false时说明新数组中不包含当前遍历的老数组的内容,并将当前遍历的老数组的元素存入新数组中
  29.                                                 if (!flag) {
  30.                                                         newArr[index++] = arr[i];
  31.                                                 }
  32.                                         }
  33.                                         //return Arrays.copyOf(newArr, index);
  34.                                         //6.去除新数组中的无效的元素
  35.                                         //7.定义一个需要返回给调用者的数组returnArr,该数组的长度为index
  36.                                         int[] returnArr = new int[index];
  37.                                         //8.将新数组中的index个元素存入returnArr数组中,并将该数组返回
  38.                                         for(int i=0;i<index;i++) {
  39.                                                 returnArr[i] = newArr[i];
  40.                                         }
  41.                                         return returnArr;
  42.                                 }
  43.                                 //自定义打印数组的方法prinArr,格式{6, 2, 9, 1, 7, 8}
  44.                                 public static String printArr(int[] arr) {
  45.                                         //1.如果arr==null,直接返回"null"
  46.                                         if(null == arr) {
  47.                                                 return "null";
  48.                                         }
  49.                                         //2.如果数组的长度为0,直接返回"[]"
  50.                                         int maxLength = arr.length-1;
  51.                                         String s = "";
  52.                                         if(-1==maxLength) {
  53.                                                 return "[]";
  54.                                         }
  55.                                         //3.遍历数组元素将数组封装成"[6, 2, 9, 1, 7, 8]"格式
  56.                                         s+="{";               
  57.                                         for(int index = 0;;index++ ) {
  58.                                                 s+=arr[index];
  59.                                                 if(index==maxLength)
  60.                                                         return s+"}";
  61.                                                 s+=", ";
  62.                                         }
  63.                                 }
  64.                         }
复制代码

评分

参与人数 1黑马币 +2 收起 理由
洋葱头头 + 2 神马都是浮云

查看全部评分

回复 使用道具 举报
楼上Arrays没有定义。。。
回复 使用道具 举报
可以把数组用toarray转成集合放到HashSet集合里面就可以去重复了
回复 使用道具 举报
每次获取旧数组中的数字时可以判断一下是否以前的是否已经有了,有了就不操作,直接下一个,没有就拿出来放到新数组中
回复 使用道具 举报
用集合来做,更方便,操作简单
回复 使用道具 举报
看代码,纯数组操作

Test002.zip

944 Bytes, 阅读权限: 100, 下载次数: 0

回复 使用道具 举报
public void test2(){
                HashSet<Integer> set=new HashSet<Integer>();
                int[] arr=new int[]{1,2,2,3,3,4,5,6,7,8,};
                for(int i=0;i<arr.length;i++){
                        set.add(arr[i]);
                }
                System.out.println(set);
        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马