2016-04-01 3 views
0

У меня есть метод в моем коде, который принимает array и возвращает этот массив с большим размером.
Как я могу использовать этот метод для нестатических массивов?
Я смущен, потому что я думаю, что массивы всегда имеют определенную длину и просто делают мой массив, а тот, который возвращается из метода, указывают на одно место памяти, используя знак «=», не могут это сделать ...
Буду признателен, если вы обратитесь к некоторым примерам методов работы с массивами.метод изменения длины массива с типом возвращаемого массива в java

public static int[] shift (int []A, final int n) 
{ 
    int []temp; 
    temp = new int[A.length]; 
    temp = A; 
    A = new int[A.length+n]; 
    System.arraycopy(temp, 0, A, 0, A.length); 

    for (int i=1; i<=n; i++){ 
    A[A.length+i] = 0;} 

    return A; 
} 

Это метод, например, и в другом методе я хочу, чтобы массив использовал возвращаемый.

int []B = new int[1]; 
B[0]=1; 
int []C = new int[n]; 

C = shift(B,10); 
+4

Можете ли вы добавить код, на который вы ссылаетесь? Без этого трудно понять. –

+0

[как сохранить массив, возвращаемый методом в java] (http://stackoverflow.com/questions/2378756/how-to-store-an-array-returned-by-a-method-in-java) Я думаю, что сообщение может ответить на ваш вопрос. – Moshe9362

+0

спасибо, я получил свой ответ :) –

ответ

0

По умолчанию массивы в java являются статическими, и вы не можете каким-либо образом изменить это поведение. Тем не менее, существует много классов в классе использования, расширяющем класс List, который может использоваться для целей динамического массива. Один из них - ArrayLis, как сказал @JoseCifuentes.

+0

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

+0

Я не имел в виду статику как модификатор доступа, но как массив фиксированного размера –

0

Вы не можете изменить размер массива. Вы можете переназначить только ссылку:

int[] arr = new int[5]; 
// 'arr' is reference to a new array size 5, in the free store. 

arr = new int[10]; 
// 'arr' is reference to a new array size 10, in the free store. First array is deallocated. 

Первый массив и все его содержимое уничтожается при переназначении arr.

Однако Java API имеет метод, чтобы создать новый массив заданной длины и скопировать все элементы старого: Arrays.copOf

Вы могли бы использовать его как это:

int[] arr = new int[5]; 
arr = Arrays.copyOf(arr, 10); // new size is 10 

Обратите внимание, что copyOf либо обрезает массив, либо прокладки с null (или 0 в случае int). См. documentation.

0

Вы проверили этот код перед публикацией здесь?

for (int i=1; i<=n; i++){ 
A[A.length+i] = 0;} 

не предусмотрен исключение.

предположим, что A.length = 2 и n = 2. то новая длина A равна 4.

Далее мы добираемся до части, там вы пытаетесь сделать A [A.length + i], когда A.length равна 4 и i, равным 1, вы пытаетесь достичь A [5], но А получил всего 4 ячейки, 0-3.

+0

nope, я просто хотел показать пример, на самом деле мой вопрос в том, как работают методы с возвратом массива? Если я сделаю массив статическим, а затем вернется не требуется, потому что он уже изменился. –

+0

, когда вы возвращаете массив, вы фактически возвращаете ссылку на массив. Затем вы можете сохранить ссылку как «int [] a = {1}; a = shift (a, 1);" то a будет указывать на arr, который возвращает возврат. – Moshe9362

Смежные вопросы