当前位置: 代码迷 >> J2SE >> 数组的移除有关问题
  详细解决方案

数组的移除有关问题

热度:103   发布时间:2016-04-24 00:30:12.0
数组的移除问题?
[code=Java][/code]:
将数组oldArr中的0去掉,把非0的存到新数组,下面的方法可以优化么?是不是一定要用到存储器?因为存储器我还有学到。谢谢大哥大姐回答,感激不尽!!!
class Exercise03
{
public static void main(String[] args)
{
int[] oldArr={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
DoMove dm=new DoMove();
dm.move(oldArr);//调用move方法,传递数组oldArr.


}
}

class DoMove
{
int index;//声明整数以记录非零位置。
int count=0;//记录非0个数。
void move(int[] a)
{
for (int i=0;i<a.length ;i++ )
{
if (a[i]!=0)
{

count++;
index=i;//保存非0数位置。
}
}
//设置循环以将上述非0数转到下面数组中。
for (int j=0;j<count ;j++ )
{
a[j]=a[index];//将非0数存到另一个数组中。
System.out.print(a[j]);
}

}
}

------解决方案--------------------
如果不用集合,就必须有一个新的数组,因为数组的长度是不可改变的。

楼主的代码有误,index的值到最后是固定的,用a[j] = a[index]赋值只会是同一个数组相同的值。

Java code
class DoMove {    void move(int[] a) {        int count = 0;  //新数组的游标        for (int i = 0; i < a.length; i++) {            if (a[i] != 0) {                a[count] = a[i];                count++;    //调到下一个游标            }        }        int newArr[];   //新数组,可以用参数传回去        newArr = new int[count];    //把count终值作为新数组的长度        System.arraycopy(a, 0, newArr, 0, count);   //复制指定长度数组,详细方法可以看API        System.out.println(Arrays.toString(newArr));    //数组的输出    }}
------解决方案--------------------
数组长度不能改变的 ,可以移动数据 ,但是长度还是原来的 ,除非用List或者再新建一个长度为原来长度 -1 的数组,然后再赋值
------解决方案--------------------
Java code
package com.cai;import java.util.ArrayList;import java.util.List;public class MoveArr {    /**     * @param args     */    public static void main(String[] args) {        String[] strArrs = { "1", "2", "3", "4", "5", "6", "7", "8" };        List list = new ArrayList();        list.add("1");        list.add("2");        list.add("3");        list.add("4");        list.add("5");        list.add("6");        list.add("7");        list.add("8");        list.add("9");        System.out.println("-----原始数组内容-----");        for (int i = 0; i < strArrs.length; i++) {            System.out.print(strArrs[i]+ "  ");        }        System.out.println("");        System.out.println("---------------------");        // 删除 第1个元素        String[] retArrs = moveArr(strArrs, 0);        System.out.println("-----删除第一个数组元素0  begin-----");        for (int i = 0; i < retArrs.length; i++) {            System.out.print(retArrs[i] + "  ");        }        System.out.println("");        System.out.println("-----删除第一个数组元素0  end-----");        System.out.println("-----List内容-----");        for (int i = 0; i < list.size(); i++) {            System.out.print(list.get(i)+ "  ");        }        System.out.println("");        System.out.println("---------------------");        // 删除第6个元素 ,因为索引时从0开始        moveList(list, 5);        System.out.println("-----删除第6个List元素  begin-----");        for (int i = 0; i < list.size(); i++) {            System.out.print(list.get(i) + "  ");        }        System.out.println("");        System.out.println("-----删除6个List元素  end-----");    }    public static String[] moveArr(String[] strArrs, int index) {        if (strArrs != null && strArrs.length > 0 && strArrs.length > index) {            String arrs[] = new String[strArrs.length - 1];            int idx = 0;            for (int i = 0; i < strArrs.length; i++) {                if (i != index) {                    arrs[idx++] = strArrs[i];                }            }            return arrs;        }        return null;    }    /**     * 使用List保存 ,然后删除指定索引的数据     *      * @param list     * @param index     */    public static void moveList(List list, int index) {        if (list != null && list.size() > 0 && list.size() > index) {            list.remove(index);        }                /*传进来5,则删除第五个元素         * index += 1 ; if (list != null && list.size() >0 && list.size() >         * index){ list.remove(index) ; }         */    }}
  相关解决方案