2013-07-15 2 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, и вы пытаетесь получить доступ к индексировать г +-, которые не могут работать, так как ваш алфавит имеют только 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]); 
} 
Смежные вопросы