Объявление нового массива большего размера в методе, который не возвращает

#java #arrays #oop #methods

#java #массивы #ооп #методы

Вопрос:

В настоящее время я заполняю раздел кода, и в нем один из методов, который я должен сделать, чтобы новый массив удвоил размер и заполнил его старыми значениями, что я и сделал, но как мне сделать так, чтобы новый массив использовался с этого момента, еслиметод ничего не возвращает?

 private void upSize()
{
    String[] biggerArr = new String[theArray.length*2];
    for( int i = 0; i < theArray.length; i  )
        biggerArr[i] = theArray[i];
}
  

Очевидно, что этот код создан для того, чтобы ничего не возвращать, но когда он вызывается где-то, как здесь, как мне на самом деле увеличить размер этого массива, чтобы он мог вместить новый «добавленный» элемент.

  public boolean add( T element ){
    if (size() == theArray.length) upSize();
    theArray[count  ] = element;
    return true;
}
  

Извините, если это было что-то, на что уже был дан ответ, я много искал и не смог найти ничего, что касалось бы этого конкретно.

Комментарии:

1. biggerArr является локальной переменной. Что вы ожидаете, что это изменит?

2. Кстати: Arrays.copyOf(theArray, theArray.length * 2) вернет массив в два раза большей длины.

3.Просто добавьте theArray = biggerArr; в конец upSize() , чтобы theArray поле обновлялось новым массивом большего размера.

4. Я здесь новичок, поэтому я точно не знаю, могу ли я / как реагировать на людей, но Энди Тернер, это была моя проблема. Обычно я бы просто вернул его, но я не могу его вернуть, но спасибо за совет Arrays.copyOf. Кроме того, Андреас, я считаю, что это именно то, что я искал, спасибо.

Ответ №1:

Вы должны вернуть новый массив и назначить его существующей ссылке, например:

 private String[] upSize()
{
    String[] biggerArr = new String[theArray.length*2];
    for( int i = 0; i < theArray.length; i  )
        biggerArr[i] = theArray[i];
    return biggerArr;
}

 public boolean add( T element ){
    if (size() == theArray.length) theArray = upSize();
    theArray[count  ] = element;
    return true;
}
  

Но посмотрите java.util.ArrayList , вам не придется изобретать велосипед 🙂

Комментарии:

1. Нет необходимости возвращать массив, было бы достаточно просто выполнить это назначение после заполнения нового массива. И обратите внимание, что ваш второй метод все время возвращает true , это абсолютно бессмысленно.

2. Правильно, было бы достаточно переназначить theArray = biggerArr; в конце upSize метода. Во втором методе уже был return true оператор, поэтому это была не моя идея поместить его туда.

3. Ничто не мешает front сообщить спрашивающему, какие еще вещи в его коде можно улучшить.