2017-04-25 8 views
1

何か別の配列と等しいと言うとき、私たちは本質的に新しい名前の配列を指していることを理解します。配列をコピーしたい場合、要素ごとに移動する必要があるか、メソッド/ javaパッケージを使用する必要があります。Java配列 - コピーと編集それでは

私たちは、これがために実行された後、X、U、Vの値は(uはX、V)で

とするために(U、V、X、)であるかを確認したい

public class puzzle { 
    public static void main(String[] args) { 
     int [] x= {1,2,4,6}; 
     double [] u= 3.0, 4.0, 5.0, 6.0,7.0}; 
     double [] v = {2.0, 4.0, 5.0}; 

     puzzle(u,v,x); //1 

     puzzle (v,u,x); //2 
    } 
    public static void puzzle(double [] first, double [] second, int [] third){ 
     double [] temp; 
     temp=first; 
     temp[2]=42.0; 
     **second= first;** 
     second[0]= 2.34; 
    } 
} 

2番目のパズルvは2.34,4.0,42.0を含む長さ3のみです。なぜこれは6個の代わりに3つだけ長いのですか(2.34,4.0,42.0,6.0,7.0)

これは配列vが3つしかないため、3の固定サイズであり、他の数字?
array1の各要素をループし、あなたが持っている配列をコピーしてarray2にそれを置くために

+0

あなたの質問を正しい構文 – Oswald

+0

で更新してください。英語が母国語でない場合:簡単な短い文章を使用してください。サブジェクト動詞オブジェクト。次の文章。私はあなたの書かれたテキストを理解するだけではなく、すべてのことについて(ひどい)恐ろしい名前を使用するソースコードだけを理解するのは非常に苦労します。コードは人間によって読み取られるように書くべきです! – GhostCat

+0

おそらく、参照渡しの動作が予想されます。 Javaは常に値渡しです。サンプルコードで 'second = first'と言うと、これはローカル変数を変更するだけです。 mainの変数 'u'と' v'はその割り当てによって変更されません。 http://stackoverflow.com/q/40480/2891664 – Radiodef

答えて

1

を(私は名前を選択しなかった):

int[] array1=new int[]{1,2,3,4,5}; 
int[] array2=new int[5]; 
for(int i=0;i<array2.length;i++){ 
    array2[i]=array1[i]; 
} 

し、指定したインデックスに新しい価値を置く配列を編集します:

array1[2]=9; 
+1

'arr.clone()'や 'Arrays.copyOf(arr、arr.length)'を使って、ループのない配列をコピーすることもできます。 – Radiodef

1

temp [2]とfirst [2]:tempの間に違いはなく、最初は同じ配列を参照します。

0

私はあなたの問題を理解していると思います(この答えを無視しない限り)。ここで理解しなければならないことは、パズル関数が最初に実行されたときに、2番目=最初に実行したということです。その後、2番目の実行は最初のものと同じものを指します。しかし、これはuとvに何の影響も与えません。彼らはいつも以前と同じ場所を指します。同じことがパズルが2回目に実行されたときに繰り返されます。

次の図は、より明確にする場合があります。 *アドレス値は単なる前提です。 パズル関数が最初に呼び出されたとき直後温度=第1の状況は、パズルの機能をするために呼び出されると次の[0] = 2.34 enter image description here

ある直後このenter image description here

状況に似ています第二の時間と温度は=第1の状況は、ちょうど秒後にこのenter image description here

状況に似ている直後[0] = 2.34は、uとvの点が変更されることはありませんする場所enter image description here

あります。

関連する問題