2011-01-23 128 views
0

我總是與增強for循環混淆。我有這樣的例子增強for循環 - JAVA

public class NonRepeatedChar 
{ 
    public static void main(String[] args) 
    { 
     String str = "javapassion"; 
     int[] count = new int[128]; 
     char[] charArr = str.toLowerCase().toCharArray(); 
     for (char c : charArr) 
     { 
      count[c]++; 
     } 
     for (char c : charArr) 
     { 
      if (count[c] == 1) 
      {  
       System.out.println("First Non repeated character is : " + c); 
       break; 
      } 
     } 
    } 
} 
在上述

因此,在for循環它說計數第一併[c] ++中,這意味着一個新的數組計數被初始化並且在迭代遞增的C值被存儲?

+1

我們無法讀取這段代碼 – irreputable 2011-01-23 21:43:29

回答

3

c依次是字符串中的每個字符,即它取值爲'j','a','v'等。
Java中的每個字符都是一個16位值,拉丁小寫字符的值小於128.
因此count [c] ++遞增與該字符相對應的數組單元格(統計它的出現次數)。

1

c被用作數組索引。它恰好在unicode(和ASCII)中的'正常'字符有一個基於10的十進制數值between 0 and 127。因此,您提供給程序的任何ASCII字符序列的整數值將始終在0到127之間。(當然,您仍然可以向Java提供非ASCII(unicode)字符,但在上下文中這個例子我猜他們想保持簡單 。)這也有利(因爲字符串轉換爲小寫)給你的答案按字母順序排序。

數組count存儲單個字符被找到的次數(將字符用作索引)。行count[c]++遞增字符c的條目。如果計數超過一個,則它變成重複字符,因此不會在最後打印出來。

1

讓您的兩個問題分開:

(一)什麼是一個for循環

(B)這是怎麼回事與操作上的計數[]數組


(A )

for循環只是一種遍歷集合或數組的方式,以便訪問集合中的每個成員。

(B)

  • 的用於通過在 「javapassion」
  • 每個字符(c)中的字符循環迭代具有被用作計數陣列索引ASCII值並[c]
  • 計數並[c] ++遞增在計數並[c]爲每個字母c
  • 在結束時,將所得的計數[]數組包含在輸入字符串中找到的每個字母的出現次數的值
1

要了解增強型for循環的魔力,請嘗試將其擴展爲常規for循環。例如,第一循環

for (char c : charArr) 
{ 
    count[c]++; 
} 

成爲

for (int i = 0; i < charArr.length; i++) 
{ 
    char c = charArr[i]; 
    count[c]++; 
} 

所以增強的for循環是更少的代碼,使其更容易輸入和閱讀,而不必訪問索引我。

增強型for循環也適用於Iterable對象,如集合,但展開爲不同的代碼。嘗試根據上述行爲和Iterable interface進行擴展。