2017-05-15 17 views
6

次のJavaの課題を理解しようとしています。Java用のプリントアウトの説明

1、2、3、4

1、2、4、4

1、2、:さえ、私は第二及び第三のプリントアウトの詳細を理解していないデバッガを実行4、8

私は最初のプリントがそのまま配列であることを理解しています.2行目は配列の[2]要素と3行目の要素を出力します。コードは次のとおりです。

public class TR1 
{ 
    public static void main(String[] args) 
    { 
     int[] v = {1, 2, 3, 4 }; 
     print(v); 
     x(v, v[2] - 1); 
     print(v); 
     x(v, v[3] - 1); 
     print(v); 
    } 

    public static void x(int array[], int y) 
    { 
     array[y] = array[y - 1] * 2; 
    } 

    public static void print(int array[]) 
    { 
     System.out.print(array[0]); 
     for (int i = 1; i < array.length; i++) 
      System.out.print(", " + array[i]); 
     System.out.println(); 
    } 
} 
+0

たとえば、なぜそれは8印刷されますか? – matrix

+3

初心者のための素敵な質問;-) – GhostCat

+1

@GhostCat私は同意する、これは非常に良い質問だと思う。 – EJoshuaS

答えて

2

はのは、このメソッドが何をするか見てみましょう:

public static void x(int array[], int y) 
    { 
     array[y] = array[y - 1] * 2; 
    } 

それは2を掛け、インデックスy-1で値をとり、その後、インデックスyにこの結果を割り当てます。

開始配列:{1,2,3,4}

v[2] - 1との通話が(3ある)インデックス2の値をとり、substracts 1ので、我々はy = 2を持っています。

我々は、方法が2あるインデックス1y-1)の値をとる前に、私たちは4を得る2ことによってそれを乗算し、指数2y)にいることを割り当てます。言ったことから、

現在の配列:{1,2,4,4}

v[3] - 1との通話が(4ある)インデックス3の値をとり、substracts 1ので、我々はy = 3を持っています。

我々は、方法が4あるインデックス2y-1)の値をとる前に、私たちは8を得る2ことによってそれを乗算し、指数3y)にいることを割り当てます。言ったことから、

現在の配列:{1,2,4,8}

+1

初心者のための非常に良い説明、すべて今明確。どうもありがとう – matrix

5

最初に起こったことを簡単に説明します。この配列から始める:

1 2 3 4 

それを印刷すると驚きはありません。

次にあなたが実行します。

array[y] = array[y - 1] * 2; 

(上記参照)2としてYを挿入できます::

につながる
array[2] = array[1] * 2; 

array[2] = 2 * 2; 

に基づいて配列が変化し

x(v, v[2] -1) ... evaluates to 

x(v, 3 - 1) ... evaluates to 

x(v, 2) 

1, 2, 4, 4 

本当の答えは、デバッガは必要ないということです。紙、ペン、思考の部分は、ここで「秘密」を明らかにするためにより効率的です。

1

printは常にアレイ全体を印刷します。 xyは、その間に配列を変更しています。

v[x]は単なる整数です。たとえば、v[2]は、ちょうど3なので、v[2] - 1 = 2です。したがって、printへの最初と2番目の呼び出しの間にv[2]を変更します。

+0

多くはありがとう、私はこれを得るが、最初は4で8をプリントする。 – matrix

+1

@matrix実際には、[3]は8 *秒に変更される。最初に 'x'が呼び出されると、' [2] 'は' 4'に変更されます。 – EJoshuaS