2016-04-01 10 views
0

私のコードにはarrayをとり、その配列をより大きなサイズで返すメソッドがあります。
非静的配列でこのメソッドを使用するにはどうすればよいですか?
配列は常に特定の長さを持ち、単純に配列を作成し、メソッドから返された配列は "="記号を使って1つの場所にポイントすると混乱します。
配列を操作するメソッドのいくつかの例を紹介していただければ幸いです。メソッド配列の長さを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クラスには、utilパッケージエクステンションのクラスがたくさんあります。 @JoseCifuentes氏によると、そのうちの1つはArrayLisです。

+0

を持っているので、私は配列の戻り値の型でメソッドを持っているときに静的でなければならないのですか? –

+0

私はアクセス修飾子として静的ではなく、固定サイズの配列として –

0

アレイのサイズを変更することはできません。あなたがarrを再割り当てするとき、それは破壊された内容をだ

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. 

最初の配列とすべて:あなたは、参照のみを再割り当てすることができます。

しかし、JavaのAPIは、指定された長さの新しい配列を作成するための方法を持っており、古いのすべての要素をコピーします。Arrays.copOf

あなたはこのようにそれを使用することができます。

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

。なお、 copyOfは、null(またはintの場合は0)の配列またはパッドを切り捨てます。 documentationを参照してください。

0

ここに投稿する前にこのコードをチェックしましたか?

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

範囲外です。

A.length = 2とn = 2としましょう。新しいAの長さは4です。

次は、Aの長さが4のときとiが1のときにA [長さ+ i]を実行しようとしています[5]しかしAはちょうど4つの細胞、0-3を得た。

+0

いいえ、私はちょうど例を示したいと思った、実際に私の質問はどのように配列の戻り値を返します?それはすでに変更されているので必要ではありません。 –

+0

配列を返すと、実際に配列への参照が返されます。次に、 "int [] a = {1}; a = shift(a、1);"のような参照を保存することができます。シフトは戻り値を返します。 – Moshe9362

関連する問題