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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

问题如下:


分析以下需求,并用代码实现:
(1)定义一个int类型的一维数组,内容为{6,2,9,6,1,2,6,7,8}
(2)去除上面定义的数组中的重复元素,并放在新的数组中, 打印最终结果{6, 2, 9, 1, 7, 8}


这题不能用集合去做, 只能用数组解 , 该怎么解??  求大神, 最好能有清晰的思路. 我想的时候. 如果去初始化一个数组, 那么数组就会有默认值0 ,那在打印新数组的时候不是有好几个0出现吗. 这是不是一个问题的 BUG ??

12 个回复

倒序浏览
非常有趣的一道题目啊,做做看
回复 使用道具 举报
明天做一下吧   今天有点晚了{:2_39:}
回复 使用道具 举报
爱逗猫的鱼 来自手机 初级黑马 2016-6-24 07:13:25
板凳
keting555 发表于 2016-6-23 18:31
问题如下:



可以在设置一个数组,然后两两比较前一个数组中的每一个元素(用嵌套for循环),把不重复的添加到新数组中
回复 使用道具 举报
不知道能不能看的清。自己打的,可能代码烦了,有简便的请随时通知。
回复 使用道具 举报
class TieBa{
        public static void main(String[] args){
                        int[] arr ={6,2,9,6,1,2,6,7,8};                                //定义原始数组
                        int count=0;                                                                //初始一个count计数器
                        a:for (int x=0;x<arr.length ;x++){                        //外循环,可以获得原始数组的每个
                                b:for (int y=x+1;y<arr.length ;y++){       
                                        if (arr[x]==arr[y]){                                //两个循环嵌套,可以使原始数组,每个元素和它(不包括它自己)之后的每个元素对比
                                                count++;                                                //遇到相等的数就标记加一(count加一)并跳出内循环,继续下个原始数组的元素,循环完成会得到重复数的个数
                                                continue a;
                                        }
                                }
                        }
                        int[] arr2=new int[arr.length-count];                //原始数组的长度减掉count(重复元素的个数)得到新数组的长度,定义新数组
                        c:for (int x=0; x<arr2.length; x++){               
                                d:for (int y=x;y<arr.length; y++){
                                        int num=0;                                                        //定义一个num的计数器
                                        for (int n=0;n<x;n++){                                //定义一个循环,使原始数组的元素和新数组之前的已赋值的元素对比
                                                if (arr[y]==arr2[n]){                        //有重复就加一
                                                        num++;
                                                }
                                        }
                                        if (num == 0){                                                //只有当计数器等于零时,表明原数组的这个元素没有赋到新数组中
                                                arr2[x]=arr[y];                                        //把这个元素赋进新的数组
                                                continue c;                                                //赋完数,跳出并继续循环c,继续下个新数组的元素的赋入
                                        }else {
                                                continue d;                                                //num不等于零时,说明这个数已经赋进新数组中了,跳出并继续d循环,进行下个原始数组的数比较
                                        }
                                }
                        }
                        System.out.print("{");                                        //开始打印数组
                        for (int x=0;x<arr2.length; x++){                //依次打印新数组的每个元素
                                System.out.print(arr2[x]+" ");
                        }
                        System.out.println("}");
        }
}
回复 使用道具 举报
AndyYan 发表于 2016-6-24 10:36
class TieBa{
        public static void main(String[] args){
                        int[] arr ={6,2,9,6,1,2,6,7,8};                                //定义原 ...

有注释时,还是图片看的条理清晰点。。
回复 使用道具 举报
本帖最后由 山水云梦 于 2016-6-24 22:48 编辑

/*
        基本逻辑

                *依次选取元素 遍历数组做比较
                        每个元素只其索引之后的元素
                        第一个元素一定不会被剔除 最后一个元素不用比较(决定循环条件的设定)
                        有元素出现重复即把原始数组长度减1
                        出现重复即结束该对元素的后续比较(可能存在多个相同元素导致重复计算)
                        得到一个新的数组长度
                        
                *定义一个临时数组
                        依次存储原始数组中重复元素的索引作为临时数组的元素
                        临时数组里的元素与其索引一致(默认值除外)
               
                *定义一个新数组并赋值
                        第一个元素可能会为0 与默认值难以区分 需预先排除
                        临时数组赋值过的元素 不会再赋值到新数组中(因此需要两个步进变量)
               
                *编写验证区
*/
  1. public class TrimArray {
  2.         public static void main(String[] args) {
  3.                 int[] arr = {6,2,9,6,1,2,6,7,8};
  4.                 int newArrLength = arr.length,temp;
  5.                 int[] tempArr = new int[newArrLength];
  6.                 for(int a = 0;a + 1 < arr.length;a++) {
  7.                         temp = arr[a];
  8.                         for(int i = a;i + 1 < arr.length;i++) {
  9.                                 if(temp == arr[i + 1]) {
  10.                                         newArrLength -= 1;
  11.                                         tempArr[i + 1] = i + 1;//可以直接赋原始值 我就按我最初的思路走了
  12.                                         break;
  13.                                 }
  14.                         }
  15.                 }
  16.                 int[] newArr = new int[newArrLength];
  17.                 newArr[0] = arr[0];
  18.                 for(int i = 1,a = 1;i < arr.length;i++ ) {
  19.                         if(i != tempArr[i]) {
  20.                                 newArr[a] = arr[i];
  21.                                 a++;
  22.                         }
  23.                 }
  24.                 System.out.print("新数组长度:");
  25.                 System.out.println(newArrLength);
  26.                 System.out.print("新数组:{");
  27.                 for(int i = 0;i < newArr.length;i++ ) {
  28.                         if(i != newArr.length - 1) {
  29.                         System.out.print(newArr[i] + ",");
  30.                         }else {
  31.                                 System.out.println(newArr[i] + "}");
  32.                         }
  33.                 }
  34.         }
  35. }
复制代码


2.png (255.14 KB, 下载次数: 7)

2.png
回复 使用道具 举报
AndyYan 发表于 2016-6-24 10:38
有注释时,还是图片看的条理清晰点。。

可以使用代码编辑器  既清晰又可复制
回复 使用道具 举报
heima_sb01 发表于 2016-6-24 23:34
马上该毕业了,本来想静静的学完好找工作,谁知道黑马竟然搬校区了,这边住宿的房租押金要不回来,新校区所有一 ...

你是哪里的?
回复 使用道具 举报
果然 有大神在
回复 使用道具 举报
不懂,同样等大神啊啊啊啊~
回复 使用道具 举报
AndyYan 发表于 2016-6-24 10:35
不知道能不能看的清。自己打的,可能代码烦了,有简便的请随时通知。

谢谢!!答的非常好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马