2014-09-23 2 views
0

У меня есть вектор вместимостью 10 и размером 5. Я пытаюсь заполнить остальное пространство нулями, выполнив его в методе padVectorWithZeores() прямо сейчас как это:заполнение пустых пространств в векторе longs with zeroes

2 -1 4 5 3 

, что я пытаюсь получить это

2 -1 4 5 3 0 0 0 0 0 

Я пытаюсь сделать это в цикле, но я продолжаю получать

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; 
    } 
+0

ли 'yourMainMethod' вашего основной метода? Почему это не определено именно так? Где определяется 'howManyOffAndPositive()'? Это глупые вопросы и, вероятно, не имеют ничего общего с вашей проблемой, но если людям приходится тратить много времени на то, чтобы отлаживать ваш код, даже чтобы его компилировать, вы должны были потратить больше времени на формулирование своего вопроса. – jedwards

ответ

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.

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.

Edit: Работа здесь примера: http://ideone.com/dU09QD