import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.util.StringTokenizer;
import java.util.NoSuchElementException;

public class Avg{
	private int i1Counter;
	private int numberOfI1Values;

	private int i2Counter;
	private int numberOfI2Values;

	Avg(){
		i1Counter        = 0;
		numberOfI1Values = 0;
		i2Counter        = 0;
		numberOfI2Values = 0;
	}

	public int readAndParseFile(){
		String currentLine  = " ";		
		String currentToken = " ";		
		String delim        = "=";
		String filename     = "values.txt";

		try{
			FileReader fr     = new FileReader(filename);
			BufferedReader br = new BufferedReader(fr);

			while((currentLine = br.readLine()) != null){
				StringTokenizer st = new StringTokenizer(currentLine, delim);
				currentToken = st.nextToken();

				if(currentToken.equals("I1")){
					currentToken = st.nextToken();
					i1Counter += new Integer(currentToken).intValue();
					numberOfI1Values++;
				}

				if(currentToken.equals("I2")){
					currentToken = st.nextToken();
					i2Counter += new Integer(currentToken).intValue();
					numberOfI2Values++;  
				}
			}	
		}

		catch(FileNotFoundException fnfe){
			System.out.println("The specified file was not found");
			return -1;
		}

		catch(IOException ioe){
			System.out.println("I/O error");
			return -1;
		}

		catch(NoSuchElementException nsee){
			System.out.println("No more tokens");
			return -1;
		}

		catch(NullPointerException npe){
			System.out.println("The specified delimeter was null");
			return -1;
		} 

		return 0;
	}

	public void computeAndPrintAvg(){
		double avg1 = 0;
		double avg2 = 0;

		avg1 = (double) i1Counter / (double) numberOfI1Values;
		avg2 = (double) i2Counter / (double) numberOfI2Values;

		System.out.println("The average of I1 values is: " + avg1);
		System.out.println("The average of I2 values is: " + avg2);	
	}

	public static void main(String[] argv){
		int ret = 0;

		Avg avg = new Avg();
		ret = avg.readAndParseFile();
		if(ret < 0)
			System.exit(-1);	

		avg.computeAndPrintAvg();
	}
}
