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

public class LetterFreq1 {
    private static final String LETTERS = "abcdefghijklmnopqrstuvwxyz";
	private ArrayList<Integer> counts;
	private int numLetters;

	public LetterFreq1(String fileName) throws java.io.FileNotFoundException {
	    this.counts = new ArrayList<Integer>();
	    for (int i = 0; i < LetterFreq1.LETTERS.length(); i++) {
	        this.counts.add(0);
	    }
	    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 = LetterFreq1.LETTERS.indexOf(Character.toLowerCase(ch));
	                this.counts.set(index, this.counts.get(index)+1);
	                this.numLetters++;
	            }
	        }
	    }
	}
	   
    public int getCount(char ch) {
	    if (Character.isLetter(ch)) {
	        int index = LetterFreq1.LETTERS.indexOf(Character.toLowerCase(ch));
	        return this.counts.get(index);
	    }
	    else {
	        return 0;
	    }
	}
	
	public double getPercentage(char ch) {
	    if (Character.isLetter(ch) && this.numLetters > 0) {
	        int index = LetterFreq1.LETTERS.indexOf(Character.toLowerCase(ch));
	        return Math.round(1000.0*this.counts.get(index)/this.numLetters)/10.0;
	    }
	    else {
	        return 0.0;
	    }
	}	    
	    
	public void showCounts() {
	    for (int i = 0; i < LetterFreq1.LETTERS.length(); i++) {
	        char ch = LetterFreq1.LETTERS.charAt(i);
	        System.out.println(ch + ": " + this.getCount(ch) + "\t(" +
	                           this.getPercentage(ch) + "%)");
	    }
	}
}
