2016-04-25 29 views
1

以下のプログラムでmyArray[i]が0を3回しか印刷しない理由を理解できません。配列内の値がループ内に挿入されたとき

int[] myArray = new int[6]; 
for (int i = 0; i <= 5; i++) { 
    myArray[i] = i++; 
    System.out.println("myArray:"+myArray[i]); 
    //need to know how to print this object myArray[i]?  
} 
System.out.println("Outside for" +Arrays.toString(myArray));  

私の出力は、次のとおりです。

myArray:0 
myArray:0 
myArray:0 
Outside for[0, 0, 2, 0, 4, 0] 

myArrayは常に0である理由私は理解していないよ...

答えて

1

javaのintのデフォルト値は0です。したがって、int配列はすべてのインデックスでゼロに初期化されます。あなたのループの最初の反復中に、次はあなたの可変状態である。私の

myArray = [0, 0, 0, 0, 0, 0]; 
i = 0; 

値は0、従ってゼロ[0] myarrayの中に挿入されます。それから私は増分されます。これで、myArray [1]の値が '0'になりました。ループの最後で、次のは

myArray = [0, 0, 0, 0, 0, 0]; 
i = 1; 

は今iの値は、forループでインクリメントされ、iの値は2.今、あなたは2の値を挿入するなり...あなたの変数の状態でありますis myArray [2]です。ポストインクリメント演算子のためにiの値がインクリメントされます。ループが実行された後、これは変数の状態です。 [4]

myArray = [0, 0, 2, 0, 0, 0]; 
i = 3; 

は、今の値は、forループだけインクリメントされ、iの値は、4の値を挿入する4.nowがMyArrayというでなります。ポストインクリメント演算子のためにiの値がインクリメントされます。ループが実行された後、これは変数の状態です。

myArray = [0, 0, 2, 0, 4, 0]; 
i = 5; 

ここで、iの値がインクリメントされ、forループの条件が壊れています。あなたはMyArrayというのあなたの値は、常に次の位置の値を出力するためのポストインクリメント操作の

Outside for[0, 0, 2, 0, 4, 0] 

...出力の次のデータ配列...の値を出力します。 intのデフォルト値は0なので、出力には常に0が出力されます。

投稿増分操作を削除すると、あなたが試していたものが見つかるはずです。そして、次のリンクはこちら

link

...増分はJavaでどのように機能するかを提供してEclipse IDEを使用してアプリケーションをデバッグする方法についてのリンクです...

link

0

あなたはi+1で値を割り当てる必要があり、新しいを保存doesntのそれ以外の場合は、あなたの変数ループ内のいくつかのステップをスキップします。だからこそループは3回だけで6回ではなく、ループに影響を与える2箇所でi++を増やします。したがって、この操作を行います。

myArray[i]=i+1; 

それとも配列にiを追加し、それはあなた次第:

myArray[i]=i; 

は、接頭辞と接尾演算子hereについてお読みください。

+0

Upvote and downvote?かなり面白いですが、なぜ私は理解できません。 –

1

問題は2つの異なる場所でiを増やすことです。一つはここにある:

for (int i=0;i<=5;i++) { 

他はここにある:

myArray[i]=i++; 

は、第1から++を削除し、それが正常に動作する必要があります。

0

iを2回増やす必要はありません。すなわち、 のforループとループの最初の行で、iがインクリメントされます。また、ループ内で値を割り当てるときには、iの値がのi番目にというインデックスで割り当てられ、次にインクリメントされます。

int[] myArray=new int[6]; 
for (int i=0;i<=5;i++) { 
    // myArray[i]=i++; Do not increment i here 
    myArray[i]=i; 
    System.out.println("Value at "+i+"th index in myArray: "+myArray[i]);  
} 
System.out.println("Outside for" +Arrays.toString(myArray)); 
0

これは何が起こるかです:あなたの配列の int[] are initialized with 0

LOOP1: i = 0 
Array gets assigned with 0 and i becomes 1 
Then i++ increments i to 2 

LOOP2: i = 2 
myArray[2] = 2 (note that myArray[1] is still 0) and i becomes 3 
Then i++ increment i to 4 

LOOP3: i = 4 
myArray[4] = 4 (myArray[3] is still 0) and i becomes 5 
Then i++ increments i to 6 

Loop terminates. 

最終結果:[0, 0, 2, 0, 4, 0]

あなたがこの問題を修正する方法については他の回答を見ることができます。

1

まあ、予告あなたがI ++の値を置く場所は、あなたが印刷する値ではありません:

最初の反復では、I = 1 したがって、2の値をmyarr [1]に入力します。今のところ、Iの値は2なので、arr [i]を印刷したいときは、2の代わりに0を使います。

関連する問題