用零填充肺矢量中的空白空间

时间:2014-09-23 10:52:01

标签: java arrays vector

我的向量容量为10,大小为5.我试图通过在方法padVectorWithZeores()中使用零来填充其余空格,现在向量看起来像这样: / p>

2 -1 4 5 3

我想要得到的是

2 -1 4 5 3 0 0 0 0 0

我试图在for循环中尝试,但我一直在

2 -1 4 5 3 0 

并且它没有用零填充其余空格

import java.util.*;

public class VectOfLongs {

   private long[] theNumbers;    
   private int size, capacity; 

   public void padVectorWithZeroes() {

       for(int i=size; i<capacity; i++){
           theNumbers[capacity]=0;
       }

       size++;
   }

   public static void yourMainMethod() {    
       VectOfLongs v = new VectOfLongs();
       v.insert(2); v.insert(-1);  v.insert(-2);
       v.insert(4); v.insert(5); v.insert(3);
       System.out.println(v);
       System.out.println(v.howManyOddAndPositive());   

       v.padVectorWithZeroes();
       System.out.println(v);
    }

    public VectOfLongs() {
       size = 0;
       capacity = 5;
       theNumbers = new long[capacity];
    }

    public void insert(long l) {
       if (size==capacity) {
          long[] tmp = new long[capacity+5];
          capacity += 5;
          for (int i=0; i<size; i++)
             tmp[i] = theNumbers[i];
          theNumbers = tmp;
      }
      theNumbers[size++] = l;
   }

2 个答案:

答案 0 :(得分:0)

public void padVectorWithZeroes() {

   for(int i=size; i<capacity; i++){
       theNumbers[capacity]=0;
   }

   size++; /// What is this?
}

您想设置size = capacity吗?

另请注意,Java language specification表示当您创建新long时,它会自动填充为零(与C不同)。所以你不需要for循环。

答案 1 :(得分:0)

根据一些假设,可能是这个块:

for(int i=size; i<capacity; i++){
   theNumbers[capacity]=0;
}

应该是

for(int i=size; i<capacity; i++){
   theNumbers[i]=0;   // Note the array index changed
}

还有其他更深层次的问题,但至少在没有ArrayIndexOutOfBoundsException的情况下进行编译和运行。

修改:此处的工作示例:http://ideone.com/dU09QD