因为你加了两次i,,,,if语句执行完后加了一次,for循环加了一次, 自己可以推导下。我改成这样的了  加油,好好学习public class Quxiang {public static void main(String[] args) {
// TODO Auto-generated method stub
int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
int i,k=0;
int newArr[]=new int[12];for(i=0;i<oldArr.length;i++)/* if(oldArr[i]==0)
    i++;
else{ newArr[k++]=oldArr[i];
    
    }
    */
if(oldArr[i]!=0)                        //改的

 newArr[k++]=oldArr[i];  //改的for(i=0;i<newArr.length;i++)
System.out.print(newArr[i]);
}}

解决方案 »

  1. 就是判断老数组元素等于0 时加了一次,
    或者可以这么改。for循环不 i++   if判断 是否中都添加i++语句。
    public class Quxiang {public static void main(String[] args) {
    // TODO Auto-generated method stub
    int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
    int i,k=0;
    int newArr[]=new int[12];for(i=0;i<oldArr.length;) if(oldArr[i]==0)
        i++;
    else{ 
    newArr[k++]=oldArr[i];
    i++;   
        }
        
    for(i=0;i<newArr.length;i++)
    System.out.print(newArr[i]);
    }}
      

  2. public class Quxiang {public static void main(String[] args) {
    // TODO Auto-generated method stub
    int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5},i,k=0;
    int newArr[]=new int[12];
    for(i=0;i<oldArr.length;i++)
    if(oldArr[i]==0)
    i++;//这里i++后提前满足条件改为continue跳出本次循环进行下一次
    else newArr[k++]=oldArr[i];for(i=0;i<newArr.length;i++)
    System.out.print(newArr[i]);
    }}
      

  3. 楼主,你稍微修改一下就可以了,下面是我简单修改的,希望能帮到你public class Test {public static void main(String[] args) {
    // TODO Auto-generated method stub
    int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
    int i,k=0;
    int newArr[]=new int[12];
    for(i=0;i<oldArr.length;)
    if(oldArr[i]==0)
    {
    i++;
    }else {
    newArr[k++]=oldArr[i];
    i++;
    }for(i=0;i<newArr.length;i++)
    System.out.print(newArr[i]);
    }}
      

  4. 实现oldArr里的非零数据保存到newArr中,并输出newArr内容的程序
    可以考虑使用Array和Vector,也许会更简单一些public class Quxiang {
        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];
            int newArrIdx = 0;
            for (int oldNum : oldArr) {
                if (oldNum != 0) {
                    System.out.print(newArr[newArrIdx++] = oldNum);
                }
            }
        }
    }134566547675
      


  5. public static void main(String[] args) {
    int oldArr[] = { 1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5 }, i, k = 0;
    int newArr[] = new int[12];
    for (i = 0; i < oldArr.length; i++)
    if (oldArr[i] != 0) {
    newArr[k++] = oldArr[i];
    } for (i = 0; i < newArr.length; i++)
    System.out.print(newArr[i]);
    }楼上都已经给出正确解答了。
    我给楼主几个建议吧。
    (1)楼主描述问题,要说说这段程序的是实现啥功能的。
    (2)建议多debug一下。
    (3)在for循环里面要注意一点,控制循环条件(这里的i)变化的地方最好在for ()这个括号内。
             否则很容易出现问题,比如你在{}里面改变了i的值,又在for ()里面改变了i的值,这种写法
             是很容易出现错误的,最好杜绝这种写法。
      

类似问题 »