// Data set summary representation 	
import java.util.*;	
import java.io.*;	
	
public class DataSet {	
	// instance variables 	
	private int n;	
	private double xSum;	
	private double minimumValue;	
	private double maximumValue;	
	
	// DataSet(): default constructor 	
	public DataSet() {	
		clear();	
	}	
	
	// DataSet(): specific constructor 	
	public DataSet(String s) throws IOException {	
		load(s);	
	}	
	
	// clear(): empties the data set 	
	public void clear() {	
		n = 0;	
		xSum = 0;	
		minimumValue = Double.NaN;	
		maximumValue = Double.NaN;	
	}	
	
	// load(): adds the values from the file to set 	
	public void load(String s) throws IOException {	
		// get a scanner for the file 	
		Scanner fileIn = new Scanner(new File (s));	
	
		// add values one by one 	
		while (fileIn.hasNextDouble()) {	
			double x = fileIn.nextDouble();	
			addValue(x);	
		}	
	}	
	
	// addValue(): adds the value to the set 	
	public void addValue(double x) {	
		xSum += x;	
		++n;	
		if (n == 1) {	
			minimumValue = maximumValue = x;	
		}	
		else if (x < minimumValue) {	
			minimumValue = x;	
		}	
		else if (x > maximumValue) {	
			maximumValue = x;	
		}	
	}	
	
	// getAverage(): compute data set average 	
	public double getAverage() {	
		if (n == 0) {	
			return Double.NaN;	
		}	
		else {	
			return xSum / n;	
		}	
	}	
	
	// getMinimum(): produce minimum data set value 	
	public double getMinimum() {	
		return minimumValue;	
	}	
	
	// getMaximum(): produce maximum data set value 	
	public double getMaximum() {	
		return maximumValue;	
	}	
	
	// getSize(): produce data set size 	
	public int getSize() {	
		return n;	
	}	
}	
	
