2013-11-30 5 views
0

Может ли кто-нибудь сказать мне, что случилось с моим кодом, почему я не получаю правильное количество букв?Неверный подсчет в программе писем JAVA Count

Эта программа считывает текстовый файл и подсчитывает все английские буквы, A-Z и a-z, а не чувствительные к регистру.

Благодарим за помощь.

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.*; 

public class Solution { 
    private static int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z; 
    public static void print(){ 
     int[] in = {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}; 
     for (int i = 0; i < in.length; i++){ 
      System.out.println(in[i]); 
     } 
    } 
    public static void main(String[] args) throws FileNotFoundException{ 

     File file = new File("t.txt"); 
     Scanner scan = new Scanner(file); 
     while (scan.hasNextLine()) { 
      String line = scan.nextLine(); 
      line = line.toLowerCase(); 
      for (int i = 0; i < line.length(); i++) { 
       switch(line.charAt(i)) { 
        case 'a': a++;break; 
        case 'b': b++;break; 
        case 'c': c++;break; 
        case 'd': d++;break; 
        case 'e': e++;break; 
        case 'f': f++;break; 
        case 'g': g++;break; 
        case 'h': h++;break; 
        case 'i': i++;break; 
        case 'j': j++;break; 
        case 'k': k++;break; 
        case 'l': l++;break; 
        case 'm': m++;break; 
        case 'n': n++;break; 
        case 'o': o++;break; 
        case 'p': p++;break; 
        case 'q': q++;break; 
        case 'r': r++;break; 
        case 's': s++;break; 
        case 't': t++;break; 
        case 'u': u++;break; 
        case 'v': v++;break; 
        case 'w': w++;break; 
        case 'x': x++;break; 
        case 'y': y++;break; 
        case 'z': z++;break; 
       } 
      } 
     } 
     print();   
    } 
} 
+0

@tom: вам обязательно нужно взглянуть на хеш-таблицы - это может быть реализовано намного проще :) – Trinimon

ответ

3

Проблема заключается в том, что, когда вы сталкиваетесь с i, что будет увеличивать переменную цикла, а не один в массиве. Поэтому вы пропустите буквы.

Изменить его:

for (int counter = 0; counter < line.length(); counter++) { 
       switch(line.charAt(counter)) { 
+0

спасибо! мне было так сложно понять, как я принимаю это как предоставленное. –

1

вашей проблемы заключается в использовании переменной я

в ваш цикл индекс счетчик я и я также является переменной, которую вы используете, чтобы посчитать вхождения алфавита «i». используйте этот основной метод, он будет работать.

public static void main(String[] args) throws FileNotFoundException{ 

    File file = new File("t.txt"); 
    Scanner scan = new Scanner(file); 
    while (scan.hasNextLine()) { 
     String line = scan.nextLine(); 
     line = line.toLowerCase(); 
     for (int index = 0; index < line.length(); index++) { 
      switch(line.charAt(index)) { 
       case 'a': a++;break; 
       case 'b': b++;break; 
       case 'c': c++;break; 
       case 'd': d++;break; 
       case 'e': e++;break; 
       case 'f': f++;break; 
       case 'g': g++;break; 
       case 'h': h++;break; 
       case 'i': i++;break; 
       case 'j': j++;break; 
       case 'k': k++;break; 
       case 'l': l++;break; 
       case 'm': m++;break; 
       case 'n': n++;break; 
       case 'o': o++;break; 
       case 'p': p++;break; 
       case 'q': q++;break; 
       case 'r': r++;break; 
       case 's': s++;break; 
       case 't': t++;break; 
       case 'u': u++;break; 
       case 'v': v++;break; 
       case 'w': w++;break; 
       case 'x': x++;break; 
       case 'y': y++;break; 
       case 'z': z++;break; 
      } 
     } 
    } 
    print();   
} 

также не забудьте закрыть сканер после того, как вы закончите.

+0

Спасибо за ваш ответ! –

Смежные вопросы