Что бы я сделал, это перебрал бы все элементы один раз, посчитав количество вхождений.Затем я напечатал бы результаты.
Самый простой способ сделать это, по моему мнению, это использовать массив целых чисел, представляющих 26 букв в английском алфавите:
int[] frequency = new int[26];
// frequency[0] is the number of words that start with A
Здесь мы можем воспользоваться тем фактом, что Java инициализирует целочисленные массивы со всеми нулями.
Затем мы проведем итерацию по month_array
и посчитаем, сколько слов начинаются с каждой буквы.
for( String word : month_array ) {
char firstLetter = word.toLowerCase().charAt(0);
int index = firstLetter - 'a'; // a = 0, b = 1, etc.
frequency[index]++;
}
В конце этого цикла for массив frequency
теперь содержит количество слов, начинающихся с каждой буквы.Мы могли бы напечатать их так:
for(int i = 0; i < 26; i++) {
System.out.print( frequency[i] );
}
Конечно, это будет в порядке от А до Я. Вы также, вероятно, захотите напечатать заголовки с буквами AZ, прежде чем повторять свои месяцы.
В вашем примере ваше первое слово - "июль 2007" - конечно, вам нужно было бы пропустить этот первый элемент перед подсчетом, так как в противном случае вы искусственно увеличивали бы (например) счетчик 'J',
public int[] extractCounts( String[] month_array ) {
int[] frequency = new int[26];
for(int i = 1; i < month_array.length; i++) {
// here, we start at 1 to omit the 'July 2007' record
String word = month_array[i];
char firstLetter = word.toLowerCase().charAt(0);
int index = firstLetter - 'a';
frequency[index]++;
}
return frequency;
}
public void printCounts(String month, int[] frequencies) {
System.out.print(month + "\t");
for(int frequency : frequencies) {
System.out.print(frequency);
System.out.print("\t");
}
}