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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵年为 中级黑马   /  2015-11-2 09:58  /  1777 人查看  /  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个元素个数,新建一个数组,长度以原数组元素不为0的个数为长度,然后对原数组进行遍历判断,不为0的添加进新数组
回复 使用道具 举报
可以先把数组转换为字符串,然后正则表达式切割程字符串数组,然后再转换为字符串,转回int数组
回复 使用道具 举报
Jared 中级黑马 2015-11-6 23:22:04
26#
遍历数组,定义计数器,遍历到0计数器++,然后定义一个数组,长度是原先数组长度减去计数器,再遍历原先数组把不是0的存进去
回复 使用道具 举报
跟毕老师讲的有个例子很像,就是去掉重复字符串的那个,你参考下。。。原理都一样。

点评

是吗?好的.谢谢  发表于 2015-11-6 23:06
回复 使用道具 举报
import java.util.*;
class Testt
{
        public static void main(String args[])
        {
                int[] arr = {1,3,1,0,5,0,5,0,4,0,2,0,10,40,3,0};
                newInts(arr);
        }
        public static void newInts(int[] arr)
        {
                ArrayList<Integer> al = new ArrayList<Integer>();
                for(int i=0;i<arr.length;i++)
                {
                        al.add(Integer.valueOf(arr[i]));
                }
               
                ArrayList<Integer> newList = new ArrayList<Integer>();
               
                Iterator<Integer> it = al.iterator();
                while(it.hasNext())
                {
                        Integer in = it.next();
                        if(!in.equals(Integer.valueOf(0)))
                        {
                                newList.add(in);
                        }
                }
                for(Integer in:newList)
                {
                        System.out.println(in);
                }
        }
}
回复 使用道具 举报
加油!加油!加油!加油!加油!加油!加油!加油!加油!
回复 使用道具 举报

这题出的够意思吧.有难度的.否则我也不会在贴吧问喽
回复 使用道具 举报

必须有难度.我反正到现在都没研究出来.代码是这些吧友给了.但是的确自己再去看也还是有难度
回复 使用道具 举报
_陈志 发表于 2015-11-2 14:58
import java.util.Arrays; class DemoArray{         public static void main(String[] args){                 int[] i={1,3,1, ...

没怎么看懂.这个代码有点乱.呵呵.
回复 使用道具 举报
创建一个新数组咯  不为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,就插入新的数组。最后返回新的数组
回复 使用道具 举报
哈哈有点意思
回复 使用道具 举报
此题好像有点难
回复 使用道具 举报
楼主不是说要把其中带0的全部剔除出去吗。。。。
回复 使用道具 举报
  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. }
复制代码

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

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

大婶。。。膜拜啊。高
回复 使用道具 举报
momoxixi 发表于 2015-11-2 11:25
我还没学set,这个方法确实简单一些
但是如果原数组有不为0的重复元素 就不能用你这个方法了 ...

恩恩 ,我没看清题目,运行后还有0,只是去掉重复的,并不是删除所有的0.
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马