2015-06-17 63 views
4

我一直在java中編程一段時間,但我只是回到基礎知識,並嘗試實際瞭解發生了什麼。反向for循環 - 解釋想要

使用for循環是遞減的,而不是遞增一個是

for (int i = string.length() - 1; i >= 0; i--) 

但我真的不明白,爲什麼我不得不把扭轉一個字符串的語法「 - 1」。長度後()?這是我的代碼。

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    reverseVertical("laptop"); 
} 

private static void reverseVertical(String string) { 
    // TODO Auto-generated method stub 

    for (int i = string.length() - 1; i >= 0; i--) { 
     System.out.println(string.charAt(i)); 
    } 

} 

「 - 1」背後的邏輯是什麼?我無法理解它 - 除了它實際上有效。

+4

指數是從零開始! stirng中的_first_字符的索引爲'0',但_last_的索引爲'length-1'。 –

回答

9

如果一個字符串有4個字符,您將通過charAt(0)得到第一個字符串,最後一個通過charAt(3),因爲索引是從零開始的。所以,你的循環將開始在第3和0結束,並在4

+0

當然!這很有道理。可愛的答案! – Charles

3

無法啓動你必須要在length - 1啓動,因爲字符串,像許多其他的Java列表和數組是0索引。這意味着它們的索引從0到capacity - 1

試圖讀取位置capacity將導致IndexOutOfBoundsException

1

這裏的關鍵是,String對象由char[]支持。因此,遍歷字符串遵循任何其他Java數組的規則,其中.length()是數組的大小(數量,容量)。索引到任何數組(包括字符串)是基於0的,因此「第一個」插槽中的項目使用0等訪問。

1

如果分配的大小爲n,則數組以索引0開始,直到n-1。 要防止IndexOutOfBoundException,正確的(最高)有效索引是n-1。 但是array.lenght會返回n。所以你必須改變索引。

0

如果你有一個字符串「Test」,那麼總長度是4,但是charatcter計數從0開始到3結束,如果你的字符串長度在你的循環中作爲string.length(),它會是4但是它在3

結束,因此在這裏你的循環將在3日開始,將在0 結束這樣可以避免IndexOutOfBoundsException有它去爲string.length減() - 1