2013-07-15 100 views
0
public class AssignmentChapter9 
{ 
    public static void main(String[] args) 
    { 
     String words = Input.getString("Please enter a series of words with the spaces omitted."); 
     String alphabet = "abcdefghijklmnopqrstuvwxyz"; 
     String inputWords = words.toLowerCase(); 
     int lcount[] = new int[26]; 
     char var1; 
     char var2; 

     for(int x = 0; x <= words.length(); x++) 
     { 
      var1 = words.charAt(x); 

      for(int y = 0; y < 27; y++) 
      { 
       var2 = alphabet.charAt(y); 

       if(var1 == var2) 
       { 
        lcount[y] += 1; 
       } 

      } 
     } 

     for(int z = 0; z < 27; z++) 
     { 
      System.out.println("Letter " + alphabet.charAt(z + 1) + " count = " + lcount[z]); 
     } 
    } 
} 

我一直在嘗試在java中編寫程序來確定字母表中每個字符出現在給定字符串中的次數。我能夠成功編譯程序,但在用戶輸入完成後,它會出現超出界限的異常。任何幫助,將不勝感激。使用字符串數組的字母計數器

回答

0

在過去的循環中,您是從0到迭代27和您試圖訪問索引Z + 1這可能不行,因爲你的字母表只有26指數 - 正確的只有ž。因此,正確的代碼是:

String alphabet = "abcdefghijklmnopqrstuvwxyz"; 
String inputWords = words.toLowerCase(); 
int lcount[] = new int[26]; 
char var1; 
char var2; 

for(int x = 0; x < words.length(); x++) 
{ 
    var1 = words.charAt(x); 
    for(int y = 0; y < alphabet.length(); y++) 
    { 
     var2 = alphabet.charAt(y); 
     if(var1 == var2) 
     { 
      lcount[y] += 1; 
     } 
    } 
} 

for(int z = 0; z < alphabet.length(); z++) 
{ 
    System.out.println("Letter " + alphabet.charAt(z) + " count = " + lcount[z]); 
} 

當您在數組或列表上迭代時,請使用長度方法並且不要使用常量!每當你用例如!?+ -你的代碼將不再工作。 長度方法衛兵你的代碼從索引出界錯誤。

你也可以節省一些代碼,並使用for each loop結構使代碼更易讀:

String alphabet = "abcdefghijklmnopqrstuvwxyz"; 
int lcount[] = new int[26]; 

for (char character : words.toLowerCase().toCharArray()) 
{ 
    for(int y = 0; y < alphabet.length(); y++) 
    { 
     if(character == alphabet.charAt(y)) 
     { 
      lcount[y] += 1; 
     } 
    } 
} 

for(int z = 0; z < alphabet.length(); z++) 
{ 
    System.out.println("Letter " + alphabet.charAt(z) + " count = " + lcount[z]); 
} 
相關問題