Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.metalcowrobotics.rapinterpreter;
- import java.util.HashMap;
- import java.util.Map;
- public class Unit{
- public class NonMatchingUnitTypeError extends Exception{
- public NonMatchingUnitTypeError(String a, String b){
- super("Unit types "+a+" and "+b+" are not of same type.");
- }
- };
- public static Map<String, String> unitNames = new HashMap<String, String>();
- static{
- unitNames.put("ft", "feet");
- unitNames.put("feet", "feet");
- unitNames.put("foot", "feet");
- unitNames.put("in", "inches");
- unitNames.put("inch", "inches");
- unitNames.put("inches", "inches");
- unitNames.put("m", "meters");
- unitNames.put("meter", "meters");
- unitNames.put("meters", "meters");
- unitNames.put("cm", "centimeters");
- unitNames.put("centimeter", "centimeters");
- unitNames.put("centimeters", "centimeters");
- unitNames.put("yd", "yards");
- unitNames.put("yds", "yards");
- unitNames.put("yard", "yards");
- unitNames.put("yards", "yards");
- unitNames.put("s", "seconds");
- unitNames.put("sec", "seconds");
- unitNames.put("secs", "seconds");
- unitNames.put("seconds", "seconds");
- unitNames.put("second", "seconds");
- unitNames.put("ms", "milliseconds");
- unitNames.put("msec", "milliseconds");
- unitNames.put("msecs", "milliseconds");
- unitNames.put("milliseconds", "milliseconds");
- unitNames.put("millisecond", "milliseconds");
- unitNames.put("min", "minutes");
- unitNames.put("mins", "minutes");
- unitNames.put("minute", "minutes");
- unitNames.put("minutes", "minutes");
- unitNames.put("pct", "percent");
- unitNames.put("percent", "percent");
- unitNames.put("%", "percent");
- unitNames.put("points", "points");
- unitNames.put("point", "points");
- unitNames.put("pts", "points");
- unitNames.put("p", "points");
- unitNames.put("rad", "radians");
- unitNames.put("radians", "radians");
- unitNames.put("radian", "radians");
- unitNames.put("rads", "radians");
- unitNames.put("deg", "degrees");
- unitNames.put("degrees", "degrees");
- unitNames.put("degree", "degrees");
- unitNames.put("degs", "degrees");
- unitNames.put("rev", "revolutions");
- unitNames.put("revs", "revolutions");
- unitNames.put("revolution", "revolutions");
- unitNames.put("revolutions", "revolutions");
- }
- public static Map<String, String> unitTypes = new HashMap<String, String>();
- static{
- unitTypes.put("feet", "length");
- unitTypes.put("inches", "length");
- unitTypes.put("meters", "length");
- unitTypes.put("centimeters", "length");
- unitTypes.put("yards", "length");
- unitTypes.put("seconds", "time");
- unitTypes.put("milliseconds", "time");
- unitTypes.put("minutes", "time");
- unitTypes.put("percent", "amount");
- unitTypes.put("points", "amount");
- unitTypes.put("radians", "rotational");
- unitTypes.put("degrees", "rotational");
- unitTypes.put("revolutions", "rotational");
- }
- public static Map<String, Double> unitValues = new HashMap<String, Double>();
- static{
- unitValues.put("feet", 1.0);
- unitValues.put("inches", 1/12.0);
- unitValues.put("yards", 3.0);
- unitValues.put("meters", 3.28);
- unitValues.put("centimeters", 0.0328);
- unitValues.put("seconds", 1.0);
- unitValues.put("milliseconds", 0.001);
- unitValues.put("minutes", 60.0);
- unitValues.put("percent", 1.0);
- unitValues.put("points", 100.0);
- unitValues.put("radians", 57.2957795);
- unitValues.put("degrees", 1.0);
- unitValues.put("revolutions", 360.0);
- }
- public Double amount;
- public String unit;
- public Unit(Double amount, String unit){
- this.amount=amount;
- this.unit=unitNames.get(unit);
- }
- public String toString(){
- return amount.toString()+" "+unit;
- }
- public Unit convertTo(String type) throws NonMatchingUnitTypeError{
- String newUnitName = unitNames.get(type);
- if (!unitTypes.get(newUnitName).equals(unitTypes.get(unit)))
- throw new NonMatchingUnitTypeError(unit, newUnitName);
- return new Unit(this.amount*unitValues.get(unit)/unitValues.get(newUnitName), type);
- }
- public Unit add(Unit otherUnit) throws NonMatchingUnitTypeError{
- if (!unitTypes.get(otherUnit.unit).equals(unitTypes.get(this.unit)))
- throw new NonMatchingUnitTypeError(this.unit, otherUnit.unit);
- return new Unit(this.amount+otherUnit.amount*unitValues.get(otherUnit.unit)/unitValues.get(this.unit), this.unit);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement