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] 这种赋值的地方出现问题,请问我应该怎么改?

解决方案 »

  1.   

    楼主说一下你想要实现什么功能,难道你想要将数组里面值为0的元素去掉?java里面的数组元素是固定的,一旦声明了元素为N个就无法改变,除非你新建一个数组将原来不为0的元素拷贝过去还有java其实并不推荐使用数组存储元素,除非特别要求用数组实现(比如webserivce的需要),而是用Collections的List Set Map用来存储数据
      

  2.   


    不是需要什么功能,纯粹的数组练习题。无法灵活去除一个数组索引的存在吗?我以为可以象php一样unset() 或 = null呢我是真的想让为0的oldArr[i]被清空或从oldArr数组中剔除。那么为什么newArr[x] = oldArr[i]; 也出错呢。
      

  3.   

    java跟php不一样,int数组里面的值不可能赋值为null,除非你声明 Integer数组,对于为0的元素不可能剔除,除非新建一个数组,下面是实现的demo
    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+",");
                }
            }}
      

  4.   


    谢谢~总算是成了。只是不知道刚刚我int oldArr[oldArr.length]; 后 newArr[x] = oldArr[i]; 总是报错是为什么,是因为位数不对么=。=算了,不纠结。
      

  5.   

    成了就结贴给分吧你还不理解的报错是因为原来的程序newArr这个数组没有被初始化,后面的所有数组元素赋值编辑器都会报错我给你改的代码有 首先统计非零数目 然后数组初始化 所以没有这个问题了
      

  6.   

     newArr[x] = oldArr[i];  //到这里必定报main错,原因应该是newArr[x]  这个用法有误答复:你这个newArr还没创建出来(new)就直接赋值了,当然报错!!! 写代码注意点
          
      

  7.   


    凡是数组,就算申明了,也还是需要开辟内存空间才可以(new),是这样吗?
    明白了~