2017-02-18 46 views
-3

我無法跟蹤一些代碼來獲取輸出:For循環跟蹤問題:無法自圓其說輸出

int[] a = new int[5]; 
for (int i = 0; i < a.length; i++) 
{ 
    a[i] = i*3-1; 
} 


for (int i = a.length-1; i >= 0; i--) 
{ 
    System.out.print(a[i] + " "); 
} 

此輸出:

11 8 5 2 -1 

我不明白的是爲什麼第二個變量'i'從第一個For循環中回到公式中。有人可以幫我連接這兩個循環?數組在第一個循環中定義,那爲什麼會影響第二個?我不明白這種關係,也許我只是想念它。

+0

「爲什麼第二個變量‘我’被放回公式中從第一個for循環」你是什麼意思?你期望的輸出是什麼? – tkausl

+0

第一個循環將數組填充爲包含'[-1,2,5,8,11]'。第二個循環只是向後打印。 –

+0

第一個循環顯然是填充數組。第二個循環顯示創建的數組,但它從最高索引(4)到最低索引(0)。變量** i **僅僅保存要處理的數組元素的當前索引號。 – DevilsHnd

回答

0
for (int i = 0; i < a.length; i++) { 
    a[i] = i*3-1; 
} 

在第一環路(上文),i是循環,這是我想你理解增量器。知道這一點,我們知道整個循環中的i的值將是0, 1, 2, 3, and 4

對於語句a[i] = i * 3 - 1,它有兩個目的。

  1. 一個索引值,用於訪問修改a數組中的值。使用i的遞增值計算新的整數。

例如,在第一次迭代中,i將是0。因此,循環內的代碼將數組的位置0的值設置爲0 * 3 - 1-1。這在循環的其餘部分繼續,解釋由第二個循環打印的值在反向打印時的值。

0

我不明白爲什麼第二個變量'我'從第一個For循環被放回到公式中。

i只是變量的名稱。在計算值時,變量i並不重要,它僅用作循環計數器。您可以在任何for循環中使用j或任何其他名稱,並且仍將獲得相同的輸出。

有人可以幫我連接這兩個循環嗎?該數組在第一個循環中定義在 中,那爲什麼它會影響第二個?

該數組在第一個循環中填充了值。但請注意,數組最初是在程序開始時聲明的。

int[] a = new int[5]; 

這意味着該數組的範圍不僅限於第一個for循環。它可以在其範圍內的任何地方訪問。

因此,在第一個for循環中,我們使用值填充數組。在第二個for循環中,我們正在顯示它。

+0

數組可能會在第一個循環中填充,但它沒有在那裏定義。 – pvg

+0

通過'定義'我的意思是填充值,而不是'聲明'。請檢查[this](https://stackoverflow.com/questions/11715485/what-is-the-difference-between-declaration-and-definition-in-java)SO問題。 – Nikhil

+0

我讀過它了。它沒有描述你所說的'定義'。如果有什麼「int new [5]」可以說是'定義',儘管這不是JLS使用的術語。無論哪種方式,'define'不是一個好詞,用於'將東西放入循環中的數組' – pvg

0

'i'的範圍在循環內,因此一旦循環結束,變量'i'不再存在並且可以被重新實例化。要了解一下這個代碼:

public class Example{ 
    public static void main(String args[]){ 
     while(isTrue){ 
      int x += 3; // Int x exists here 
     } 
     //x does not exist here it is outside of scope so we can make another 
     int x = 10; 
    } 
} 

Var Scope