2016-04-27 52 views
1

這是我的代碼。我必須計算我的文本中字母的頻率。 我得到的輸出: b 28(應爲7) C 34(應爲6)如何在循環結束時退出for循環,並輸入新的數據而不用付款

我想我的問題是,它使之,我不想它。

int[] alphabetArray = new int[26];  
    // char varA = 'a';  
    alphabetArray[0] = A;`` 

    int count = 0; 
    for (int i = 0; i < text.length; i++) { 
     if (text[i] == A) { 
      count++; 
     } 
    } 
    System.out.println((char) alphabetArray[0] + " kommt " + count + " Mal"); 

    alphabetArray[1] = B; 

    for (int i = 0; i < text.length; i++) { 
     if (text[i] == B) { 
      count++; 
     } 
    } 
    System.out.println((char) alphabetArray[1] + " kommt " + count + " Mal"); 
    alphabetArray[2] = C; 
    for (int i = 0; i < text.length; i++) { 
     if (text[i] == C) { 
      count++;  
     } 
    } 
    System.out.println((char) alphabetArray[2] + " kommt " + count + " Mal"); 

    return null; 
+1

您應該在每個打印語句後將'count'設置爲'0'。 – Titus

+0

所以你不介意我必須在每個循環中聲明計數? – sitm

回答

0

雖然可以通過清空打印後count解決您的問題,你的程序將與循環本身重複三次不太理想。當你看到這樣的模式時,這表示你需要另一個循環。

製作一個循環外部您的當前循環要處理從'A''Z'的字母。

for (char letter = 'A' ; letter <= 'Z' ; letter++) { 
    int letterIndex = letter - 'A'; 
    for (int i = 0; i < text.length; i++) { 
     if (text[i] == letter) { 
      alphabetArray[letterIndex]++; 
     } 
    } 
} 

注意,因爲你正在積累計數所有字母,你並不需要一個單獨的count變量:由於在Unicode字母碼點是連續的,你可以從中減去'A'找到一個字母的指數,因爲alphabetArray[letterIndex]取而代之。如果要隨時打印字母頻率,請在嵌套循環後打印alphabetArray[letterIndex]

+0

這就是trur dasblinkenlight .. –

+0

只是一個問題:爲什麼letterIndex = letter - 'A'?我在這裏不明白 – sitm

+0

@sitm變量'letter'表示一個字母的數字UNICODE代碼點。字母「A」到「Z」的數字代碼點是連續的數字。這意味着您可以從'letter'中減去具有最低代碼點的字母的數字,以查找該字母距'A'多遠。對於'B'你會得到''B' - 'A'== 1',對於'C'你會得到''C' - 'A'== 2',等等。 – dasblinkenlight

0

您初始化計數= 0一次,你都無需重新initalizing它增加爲0。

int[] alphabetArray = new int[26];  
// char varA = 'a';  
alphabetArray[0] = A;`` 

int count = 0; 
for (int i = 0; i < text.length; i++) { 
    if (text[i] == A) { 
     count++; 
    } 
} 
System.out.println((char) alphabetArray[0] + " kommt " + count + " Mal"); 

alphabetArray[1] = B; 
count=0; 
for (int i = 0; i < text.length; i++) { 
    if (text[i] == B) { 
     count++; 
    } 
} 
System.out.println((char) alphabetArray[1] + " kommt " + count + " Mal"); 
alphabetArray[2] = C; 
count=0; 
for (int i = 0; i < text.length; i++) { 
    if (text[i] == C) { 
     count++;  
    } 
} 
System.out.println((char) alphabetArray[2] + " kommt " + count + " Mal"); 

return null; 
+0

非常感謝你現在的作品!任何提示,如果我想切換而不是?因爲它可以很長,直到字母Z! – sitm

+0

你只需要計算特定字符串中字符的出現次數。一種方法是創建一個大小爲26的int數組,並且每當您發現該角色增加它時,最終您將獲得每個角色的出現次數。但是,如果你想要一個特定的字符串,那麼使用字符串hashmap作爲key和integer作爲值,所以每當你發現它只是放入它,如果它存在只是增加計數。如果這有助於將其標記爲答案,以便其他人可以輕鬆地引用它。 –

+0

使用hasmap是一個好主意,我只想在不使用它的情況下做,但我想我會做,如果我沒有任何其他解決方案:) – sitm