Java Programming Home Page: Archive: Message #90

Date: Oct 09 2000 19:50:18 EDT
From: "Java Programming" <javaProgramming-owner@listbot.com>
Subject: an answer to HW2,

abstract public interface Convertible {
	void setMetric(boolean b);
	boolean isMetric();
	double getValue();
	void setValue(double d);
	String getUnits();
}

 public abstract class MetricHandler 
 		implements Convertible {

	private boolean metric = true;
	private String eUnits;
	private String mUnits;
	
	MetricHandler(String _mUnits, 
		String _eUnits) {
		eUnits = _eUnits;
		mUnits = _mUnits;

	}

	public boolean isMetric() {
		return metric;
	}

    public void setMetric(boolean b) {
		 metric = b;
	}

	public String getUnits() {
		if (isMetric()) {	
			return mUnits;
		}
		return eUnits;
	}
}
interface MetricFcn {
	double m2e(double d);
	double e2m(double d);
}

abstract class ValueHandler extends 
		MetricHandler
		implements MetricFcn {
	double evalue = 0;
	double mvalue = 0;
	ValueHandler(
		String _eUnits, 
		String _mUnits){
		super(_eUnits,_mUnits);
		
	}
	public double getValue() {
		return isMetric()?mvalue:evalue;
	}
	public void setValue(double d) {
		if (isMetric() ) {
			mvalue = d;
			evalue = m2e(d);
			return;
		}
		evalue = d;
		mvalue = e2m(d);
		
	}
}

public class Meters2Yards 
	extends ValueHandler {
	Meters2Yards() {
		super("meters","yards");
	}
	public double m2e(double d) {
		return d / 1.1;
	}
	public double e2m(double d) {
		return d * 1.1;
	}
}
public class Liters2Gallons 
	extends ValueHandler {
	Liters2Gallons() {
		super("liters","gallons");
	}
	public double m2e(double d) {
		return d / 3.78;
	}
	public double e2m(double d) {
		return d * 3.78;
	}
}

public class Test {
	Liters2Gallons l2g = new Liters2Gallons();
	Test() {
		l2g.setMetric(true);
		l2g.setValue(10);
		System.out.println(	
			l2g.getValue()+
			" "+ l2g.getUnits());

		l2g.setMetric(false);
		System.out.println(	
			l2g.getValue()+
			" "+ l2g.getUnits());
	}
	public static void main(String args[]) {
		Test t = new Test();
	}
}