日期:2014-05-20  浏览次数:20680 次

一个java数组赋值的问题
Java code

public class xiti{
    public static void main(String args[]){
        int oldArr[] = {1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
        //newArr = new int[oldArr.length];
        int newArr[] = null;
        int x = 0;  //newArr数组键位的基数

        for(int i = 0 ; i < oldArr.length ; i ++ ){

            if(oldArr[i] == 0){ //不知该如何删除数组中的索引
                oldArr[i] = null;
            }else{
                x++;
                System.out.println("现在的x是"+x);  //程序第一次循环能执行到这里
                newArr[x] = oldArr[i];  //到这里必定报main错,原因应该是newArr[x]  这个用法有误
            }
        }
        System.out.println("oldArr去除0后变成了:");

        for(int i:oldArr){
            System.out.print(i+"+");
        }

        System.out.println("新数组newArr的样子为:");

        for(int i:newArr){
            System.out.print(i+"+");
        }
    }
}



这段代码总在newArr[x] 这种赋值的地方出现问题,请问我应该怎么改?

------解决方案--------------------
java跟php不一样,int数组里面的值不可能赋值为null,除非你声明 Integer数组,对于为0的元素不可能剔除,除非新建一个数组,下面是实现的demo

Java code

public class Xiti {
    public static void main(String args[]){
            int oldArr[] = {1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
            //newArr = new int[oldArr.length];
            int newArr[] = null;
            int x = 0;  //newArr数组键位的基数

          //计算非零元素的数目
           for(int i:oldArr){
               if(i!=0)
                   x++;
           }
           newArr=new int[x];
            for(int i = 0 ,j=0; i < oldArr.length ; i ++ ){

                if(oldArr[i] != 0){ 
                    newArr[j] = oldArr[i];
                    j++;
                }
            }
            System.out.println("oldArr:");

            for(int i:oldArr){
                System.out.print(i+",");
            }

            System.out.println("新数组newArr的样子为:");

            for(int i:newArr){
                System.out.print(i+",");
            }
        }

}