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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵年为 中级黑马   /  2015-11-2 09:58  /  1762 人查看  /  30 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是我一个很好的朋友给我出的数组题,难倒我了.
写一个方法要求输入一个整形数组,将数组中的0去掉后返回一个新的数组.
比如说int[] i={1,3,1,0,5,0,5,0,4,0,2,4,3,4,0,10,40,3,0};
现在有这么一个数组.
要将其中带0的全部踢出去,打印出剩下的数字,统计数字,返回新的数组.

30 个回复

倒序浏览
很简单啊,定义一个新的数组,遍历原数组,如果元素不等于0,就插入新的数组。最后返回新的数组
回复 使用道具 举报
大概是这样,可是实现起来真的是好难噢
回复 使用道具 举报
本帖最后由 momoxixi 于 2015-11-2 11:16 编辑
  1. /**
  2. * Created by mo on 15/11/2.
  3. *
  4. * 定义一个新数组,遍历原数组,如果元素不为0则加入新数组
  5. * 新数组长度不确定 所以决定先遍历一遍 查出来原数组有几个0 再创新新数组
  6. */

  7. class ccc {
  8.     public static void main(String[] args) {
  9.         int arr[] = {1,0,4,3,0,5,6,7,2,0,8,3,0,4,2,5,0,42,3,5,6,0,31,4,54,6,0,4};

  10.         printArr(del0(arr));  //调用方法
  11.     }

  12.     public static int[] del0(int[] arr){
  13.         int count=0;            //原数组中0的个数
  14.         for (int nums:arr){
  15.             if (nums == 0){
  16.                 count++;
  17.             }
  18.         }
  19.         int[] arr1 = new int[arr.length-count];  //新数组长度=原数组.length-count
  20.         for (int i=0,y=0;i<arr.length;i++){   //y为新数组的index,遍历到0的时候跳过循环,y不自增
  21.             if (arr[i] == 0){
  22.                 continue;
  23.             }else {
  24.                 arr1[y] = arr[i];
  25.                 y++;
  26.             }
  27.         }
  28.         return arr1;
  29.     }

  30.     public static void printArr(int[] arr){
  31.         for (int nums:arr){
  32.             System.out.print(nums+" ");
  33.         }
  34.     }
  35. }
复制代码
回复 使用道具 举报
package string;

import java.util.Arrays;
import java.util.Set;
import java.util.TreeSet;

public class TestSort {
    public static void main(String[] args) {
        int[] testArr={1,3,1,0,5,0,5,0,4,0,2,4,3,4,0,10,40,3,0};
        
        //这里看到的是原来的数
        System.out.println(Arrays.toString(testArr));
        
       // 你可以用Set,Set不可以添加重复的元素,吧素组转存到Saet当中,再把Set变成数组
        Set<Integer> set=new TreeSet<Integer>();
        for (int i : testArr) {
            set.add(i);
        }
        Integer[] arr2=set.toArray(new Integer[0]);
        //数组的包装类型不能转 只能自己转;把Integer转为为int数组;
        int[] result=new int[arr2.length];
        for (int i = 0; i < result.length; i++) {
            result[i]=arr2[i];
        }
        //打印出删掉重复元素0后的新数组
        System.out.println(Arrays.toString(arr2));
        }
     

}
回复 使用道具 举报
744919632 发表于 2015-11-2 11:19
package string;

import java.util.Arrays;

我还没学set,这个方法确实简单一些
但是如果原数组有不为0的重复元素 就不能用你这个方法了
回复 使用道具 举报
public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 3, 1, 0, 5, 0, 5, 0, 4, 0, 2, 4, 3, 4, 0, 10, 40, 3, 0};
        // 首先计算新数组长度
        int newArrLength = calcNewArrLength(arr);
        System.out.println(newArrLength);
        int[] newArr = new int[newArrLength];

        newArr = replaceArr(arr, newArr);
        printArr(newArr);

    }

    private static int calcNewArrLength(int[] arr) {
        int length = 0;
        for (int i = 0; i < arr.length; i++) {
            // 元素不等于0才自增1,这样保证元素为零的时候不计算长度
            if (arr[i] != 0)
                length++;
        }
        return length;
    }

    private static void printArr(int[] newArr) {
        for (int i = 0; i < newArr.length; i++) {
            System.out.print(newArr[i] + " ");
        }
    }

    private static int[] replaceArr(int[] arr, int[] newArr) {
        // 记录新数组的索引,因为每一次插入数据到新数组都要知道往哪个索引插入
        int newArrIndex = 0;

        for (int i = 0; i < arr.length; i++) {
            // 原来的数组中对应的元素不等于0,就提取出来放到新数组
            if (arr[i] != 0) {
                // 这里的算法解释:
                /*
                * 当arr取到第0个元素,不为零,则取出来放到newArr,如果取到第1个元素为零,则继续遍历,当取到第2个元素不为零,则应该新数组的索引是:旧数组的索引减去旧数组索引和新数组索引的差
                * i就是旧数组的索引
                * */
                newArr[i - (i - newArrIndex)] = arr[i];
                newArrIndex++;
            }
        }
        return newArr;
    }
}
------------------------
上一个答案看错题目了,重新补上。
回复 使用道具 举报 2 0
momoxixi 发表于 2015-11-2 11:25
我还没学set,这个方法确实简单一些
但是如果原数组有不为0的重复元素 就不能用你这个方法了 ...

恩恩 ,我没看清题目,运行后还有0,只是去掉重复的,并不是删除所有的0.
回复 使用道具 举报
744919632 发表于 2015-11-2 11:35
恩恩 ,我没看清题目,运行后还有0,只是去掉重复的,并不是删除所有的0. ...

大婶。。。膜拜啊。高
回复 使用道具 举报
赵年为 发表于 2015-11-2 12:28
大婶。。。膜拜啊。高

呵呵,互相学习,我也还是菜鸟。

点评

很厉害  发表于 2015-11-4 21:59
回复 使用道具 举报
学习了 6666666
回复 使用道具 举报
  1. public static int[] demo(int[] arr){
  2.         ArrayList<Integer> al = new ArrayList<Integer>();       
  3.         for(int x = 0;x<arr.length;x++){
  4.                 if(arr[x]!=0)                //遍历该数组,如果不是0就把这个值存入到ArrayList中
  5.                         al.add(arr[x]);       
  6.         }
  7.         Object[] obj = al.toArray();        //把ArrayList转换成数组,因为不能接收int数组,也不能强制,所以下面就弄一个新数组
  8.         int[] newArr = new int[obj.length];
  9.         for(int x = 0;x<newArr.length;x++){
  10.                 newArr[x] = (int) obj[x];        //把剔除好的值全部存入新数组中
  11.         }
  12.         return newArr;        //返回这个新数组
  13. }
复制代码

回复 使用道具 举报
楼主不是说要把其中带0的全部剔除出去吗。。。。
回复 使用道具 举报
此题好像有点难
回复 使用道具 举报
哈哈有点意思
回复 使用道具 举报
很简单啊,定义一个新的数组,遍历原数组,如果元素不等于0,就插入新的数组。最后返回新的数组
回复 使用道具 举报
下面是本人经过编译验证正确的,可以输入任意的整数数组,去0求得新数组.

class Demo1_GetNewArray {
        public static void main(String[] args) {
                int[] array = {1,3,1,0,5,0,5,0,4,0,2,4,3,4,0,10,40,3,0};
                int [] newArray = getNewArray(array);
                printArray(newArray);
                System.out.println();
                System.out.println("除去0元素之后的新数组长度是" + newArray.length);

        }
       
        public static int[] getNewArray(int[] array){
                int count = 0;
                for (int i = 0;i<array.length ;i++ ) {
                        if (array[i]==0) {
                                count++;
                        }
                }
                int length = array.length - count;
                int [] newArray = new int [length];
                int j = 0;
                for (int i = 0;i<length ;i++ ) {
                        while (j<array.length) {               
                                if (array[j]!=0) {
                                        newArray[i] = array[j];
                                        j++;                       
                                        break;
                                } else{
                                        j++;
                                }
                        }               
                }
                return newArray;
        }

        public static void printArray(int[] array){
                for (int i = 0;i<array.length ;i++ ) {
                        System.out.print(array[i] + " ");
                }
        }
}









回复 使用道具 举报
创建一个新数组咯  不为0就添加
回复 使用道具 举报
_陈志 发表于 2015-11-2 14:58
import java.util.Arrays; class DemoArray{         public static void main(String[] args){                 int[] i={1,3,1, ...

没怎么看懂.这个代码有点乱.呵呵.
回复 使用道具 举报

必须有难度.我反正到现在都没研究出来.代码是这些吧友给了.但是的确自己再去看也还是有难度
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马