救救孩子吧,eclipse已经无响应了,运行了什么结果都没有,但是风扇转的蛮快的

public  class Demo2_10{
	public static void arrayqulin(int a[])
	{	
		for(int x=0;x<a.length-1;x++)
		{
			if(a[x]==0)
			{
				for(int i=x;i<a.length-3;i++)
				{
					a[i]=a[i+1];
				}
				x--;
			}	
		}
	}
	public static int number(int a[])
	{
		int count=0;
		for(int x=0;x<a.length-1;x++)
		{
			if(a[x]==0)
			count++;	
		}
		return count;
	}
	public static void printarray(int a[])
	{
		System.out.print("int newArr[]={");
		for(int i=0;i<=a.length-1;i++)
			{
			System.out.print(a[i]+",");
			if(i==a.length-1)
				System.out.println(a[a.length-1]+"};");
			}
	}
	public static void movearray(int a[],int b[])
	{
		for(int i=0;i<b.length-1;i++)
		{
			b[i]=a[i];
		}
	}
	public static void main(String[] args) {
		
		int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ;
		int[] newArr=new int[oldArr.length-number(oldArr)-1];
		arrayqulin(oldArr);
		movearray(oldArr,newArr);
		printarray(newArr);
		
	}
}

我写的这个代码的目的是将oldArr中的0去掉之后变成一个新的数组给newArr,然后运行了什么结果都没有,但是风扇转的蛮快的,eclipse直接无响应了......

public class Demo2_10{
    public static int number(int a[])
    {
        int count=0;
        for(int x=0;x<=a.length-1;x++) //下标从0开始,所以最后一位是a.length-1
        {
            if(a[x]==0)
                count++;
        }
        return count;
    }
    public static void printarray(int a[])
    {
        System.out.print("int newArr[]={");
        for(int i=0;i<=a.length-1;i++)
        {
            //如果按之前那种,最后一个元素会输出两次
            if(i==a.length-1)
                System.out.println(a[a.length-1]+"};");
            else
                System.out.print(a[i]+",");
        }
    }
    //没必要调用arrayqulin,直接for循环判断,不是0的就挪到新数组
    public static void movearray(int a[],int b[])
    {
        for(int i=0,j=0;i<=a.length-1;i++)
        {
            if(a[i]!=0){
                b[j] = a[i];
                j++;
            }
        }
    }
    public static void main(String[] args) {
        int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ;
        int[] newArr=new int[oldArr.length-number(oldArr)];//这里不用-1,两个长度相减得到新数组的长度
        movearray(oldArr,newArr);
        printarray(newArr);
    }
}

 

说不定你写了个死循环,哈哈哈哈

public static void main(String[] args) {
    	// 源数组
        int[] oldArr = {1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5};
        // 不为零的数组存储
        int[] notZero = new int[oldArr.length];
        // 不为零的元素计数
        int ind = 0;
        // 循环遍历
        for (int i = 0; i < oldArr.length; i++) {
        	// 找出不为0的元素并放入notZero中存储
            if (oldArr[i] != 0) {
                System.arraycopy(oldArr, i, notZero, ind++, 1);
            }
        }
        System.out.println("oldArr含有0的元素共有" + (oldArr.length - ind) + "个");
        // 创建非0输出数组
        int[] newArr = new int[ind];
        // 拷贝过来 参数说明详见源码
		System.arraycopy(notZero, 0, newArr, 0, newArr.length);
		// 循环输出
		Arrays.stream(newArr).forEach(num -> System.out.print(num+","));
    }

我比较懒

public static void main(String[] args) {
        int[] oldArr = {1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5};
        int[] notZero = new int[oldArr.length];
        int ind = 0;
        for (int i = 0; i < oldArr.length; i++) {
            if (oldArr[i] != 0) {
                System.arraycopy(oldArr, i, notZero, ind++, 1);
            }
        }
        int[] newArr = new int[ind];
		System.arraycopy(notZero, 0, newArr, 0, newArr.length);
		Arrays.stream(newArr).forEach(num -> System.out.print(num+","));
    }

我看看去掉注释需要多少行

行号没了- -

这段代码是有可能存在死循环的,当你最后的索引大于a.length-3时,值就不会去掉0,++,--就跳不出循环了,而且一个去重操作,没人会搞得这么复杂。

漏洞百出。。