import java.util.Scanner;
import java.io.File;

public class LetterFreq2 {
    private static final String LETTERS = "abcdefghijklmnopqrstuvwxyz";
	private int[] counts;
	private int numLetters;

	public LetterFreq2(String fileName) throws java.io.FileNotFoundException {
	    this.counts = new int[LetterFreq2.LETTERS.length()];
	    this.numLetters = 0;
	    
	    Scanner infile = new Scanner(new File(fileName));
	    while (infile.hasNext()) {
	        String nextWord = infile.next();
	        for (int c = 0; c < nextWord.length(); c++) {
	            char ch = nextWord.charAt(c);
	            if (Character.isLetter(ch)) {
	                int index = LetterFreq2.LETTERS.indexOf(Character.toLowerCase(ch));
	                this.counts[index]++;
	                this.numLetters++;
	            }
	        }
	    }
	}
	   
    public int getCount(char ch) {
	    if (Character.isLetter(ch)) {
	        int index = LetterFreq2.LETTERS.indexOf(Character.toLowerCase(ch));
	        return this.counts[index];
	    }
	    else {
	        return 0;
	    }
	}
	
    public double getPercentage(char ch) {
	    if (Character.isLetter(ch) && this.numLetters > 0) {
	        int index = LetterFreq2.LETTERS.indexOf(Character.toLowerCase(ch));
	        return Math.round(1000.0*this.counts[index]/this.numLetters)/10.0;
	    }
	    else {
	        return 0.0;
	    }
	}	
	public void showCounts() {
	    for (int i = 0; i < LetterFreq2.LETTERS.length(); i++) {
	        char ch = LetterFreq2.LETTERS.charAt(i);
	        System.out.println(ch + ": " + this.getCount(ch) + "\t(" +
	                           this.getPercentage(ch) + "%)");
	    }
	}
}
