I'm trying to convert between units. Whenever I run the tester and enter an input, the output is always 0. For example, if I ask to convert from inches to feet, and I enter 12 inches, the output is 0.0 ft.
Here's my class (sorry that it's extremely long; a lot of it is repetition)
public class UnitConverter
private String convertTo;
private String convertFrom;
private double value;
private double convertedResult;
//inches
final double INCHES_PER_INCH = 1;
final double FEET_PER_INCH = (1/12);
final double MILES_PER_INCH = 0.0000158;
final double MILLIMETERS_PER_INCH = 25.4;
final double CENTIMETERS_PER_INCH = 2.54;
final double METERS_PER_INCH = 0.0254;
final double KILOMETERS_PER_INCH = 0.0000254;
//feet
final double INCHES_PER_FOOT = 12;
final double FEET_PER_FOOT = 1;
final double MILES_PER_FOOT = 0.0001894;
final double MILLIMETERS_PER_FOOT = 304.80060996;
final double CENTIMETERS_PER_FOOT = 30.48;
final double METERS_PER_FOOT = 0.3048;
final double KILOMETERS_PER_FOOT = 0.0003048;
//miles
final double INCHES_PER_MILE = 63360;
final double FEET_PER_MILE = 5280;
final double MILES_PER_MILE = 1;
final double MILLIMETERS_PER_MILE = 1609344;
final double CENTIMETERS_PER_MILE = 160934.4;
final double METERS_PER_MILE = 1609.344;
final double KILOMETERS_PER_MILE = 1.609344;
//millimeters
final double INCHES_PER_MILLIMETER = 0.0393701;
final double FEET_PER_MILLIMETER = 0.0032808;
final double MILES_PER_MILLIMETER = 0.0000006;
final double MILLIMETERS_PER_MILLIMETER = 1;
final double CENTIMETERS_PER_MILLIMETER = 0.1;
final double METERS_PER_MILLIMETER = 0.001;
final double KILOMETERS_PER_MILLIMETER = 0.0000001;
//centimeters
final double INCHES_PER_CENTIMETER = 0.393701;
final double FEET_PER_CENTIMETER = 0.032808;
final double MILES_PER_CENTIMETER = 0.000006;
final double MILLIMETERS_PER_CENTIMETER = 10;
final double CENTIMETERS_PER_CENTIMETER = 1;
final double METERS_PER_CENTIMETER = 0.01;
final double KILOMETERS_PER_CENTIMETER = 0.000001;
// meters
final double INCHES_PER_METER = 39.37;
final double FEET_PER_METER = 3.281;
final double MILES_PER_METER = 0.0006214;
final double MILLIMETERS_PER_METER = 1000;
final double CENTIMETERS_PER_METER = 100;
final double METERS_PER_METER = 1;
final double KILOMETERS_PER_METER = 0.001;
//kilometers
final double INCHES_PER_KILOMETER = 39370;
final double FEET_PER_KILOMETER = 3280.83333;
final double MILES_PER_KILOMETER = 0.6214;
final double MILLIMETERS_PER_KILOMETER = 1000000;
final double CENTIMETERS_PER_KILOMETER = 100000;
final double METERS_PER_KILOMETER = 1000;
final double KILOMETERS_PER_KILOMETER = 1;
/**
* Constructs a unit converter that converts from one unit to another
* @param convertFrom unit you are converting from
* @param convertTo unit you want to convert to
*/
public UnitConverter(String convertFrom, String convertTo)
{
this.convertFrom = convertFrom;
this.convertTo = convertTo;
}
/**
* Gets the converted value
* @return getValue converted value
*/
public double getValue(double value)
{
//inches
if(convertFrom.equalsIgnoreCase("in") || convertFrom.equalsIgnoreCase("inch") || convertFrom.equalsIgnoreCase("inches"))
{
if(convertTo.equalsIgnoreCase("in") || convertTo.equalsIgnoreCase("inch") || convertTo.equalsIgnoreCase("inches"))
convertedResult = INCHES_PER_INCH * value;
else if(convertTo.equalsIgnoreCase("ft") || convertTo.equalsIgnoreCase("foot") || convertTo.equalsIgnoreCase("feet"))
convertedResult = FEET_PER_INCH * value;
else if(convertTo.equalsIgnoreCase("mi") || convertTo.equalsIgnoreCase("mile") || convertTo.equalsIgnoreCase("miles"))
convertedResult = MILES_PER_INCH * value;
else if(convertTo.equalsIgnoreCase("mm") || convertTo.equalsIgnoreCase("millimeter") || convertTo.equalsIgnoreCase("millimeters"))
convertedResult = MILLIMETERS_PER_INCH * value;
else if(convertTo.equalsIgnoreCase("cm") || convertTo.equalsIgnoreCase("centimeter") || convertTo.equalsIgnoreCase("centimeters"))
convertedResult = CENTIMETERS_PER_INCH * value;
else if(convertTo.equalsIgnoreCase("m") || convertTo.equalsIgnoreCase("meter") || convertTo.equalsIgnoreCase("meters"))
convertedResult = METERS_PER_INCH * value;
else if(convertTo.equalsIgnoreCase("km") || convertTo.equalsIgnoreCase("kilometer") || convertTo.equalsIgnoreCase("kilometers"))
convertedResult = KILOMETERS_PER_INCH * value;
}
//feet
else if(convertFrom.equalsIgnoreCase("ft") || convertFrom.equalsIgnoreCase("foot") || convertFrom.equalsIgnoreCase("feet"))
{
if(convertTo.equalsIgnoreCase("in") || convertTo.equalsIgnoreCase("inch") || convertTo.equalsIgnoreCase("inches"))
convertedResult = INCHES_PER_FOOT * value;
else if(convertTo.equalsIgnoreCase("ft") || convertTo.equalsIgnoreCase("foot") || convertTo.equalsIgnoreCase("feet"))
convertedResult = FEET_PER_FOOT * value;
else if(convertTo.equalsIgnoreCase("mi") || convertTo.equalsIgnoreCase("mile") || convertTo.equalsIgnoreCase("miles"))
convertedResult = MILES_PER_FOOT * value;
else if(convertTo.equalsIgnoreCase("mm") || convertTo.equalsIgnoreCase("millimeter") || convertTo.equalsIgnoreCase("millimeters"))
convertedResult = MILLIMETERS_PER_FOOT * value;
else if(convertTo.equalsIgnoreCase("cm") || convertTo.equalsIgnoreCase("centimeter") || convertTo.equalsIgnoreCase("centimeters"))
convertedResult = CENTIMETERS_PER_FOOT * value;
else if(convertTo.equalsIgnoreCase("m") || convertTo.equalsIgnoreCase("meter") || convertTo.equalsIgnoreCase("meters"))
convertedResult = METERS_PER_FOOT * value;
else if(convertTo.equalsIgnoreCase("km") || convertTo.equalsIgnoreCase("kilometer") || convertTo.equalsIgnoreCase("kilometers"))
convertedResult = KILOMETERS_PER_FOOT * value;
}
//miles
else if(convertFrom.equalsIgnoreCase("mi") || convertFrom.equalsIgnoreCase("mile") || convertFrom.equalsIgnoreCase("miles"))
{
if(convertTo.equalsIgnoreCase("in") || convertTo.equalsIgnoreCase("inch") || convertTo.equalsIgnoreCase("inches"))
convertedResult = INCHES_PER_MILE * value;
else if(convertTo.equalsIgnoreCase("ft") || convertTo.equalsIgnoreCase("foot") || convertTo.equalsIgnoreCase("feet"))
convertedResult = FEET_PER_MILE * value;
else if(convertTo.equalsIgnoreCase("mi") || convertTo.equalsIgnoreCase("mile") || convertTo.equalsIgnoreCase("miles"))
convertedResult = MILES_PER_MILE * value;
else if(convertTo.equalsIgnoreCase("mm") || convertTo.equalsIgnoreCase("millimeter") || convertTo.equalsIgnoreCase("millimeters"))
convertedResult = MILLIMETERS_PER_MILE * value;
else if(convertTo.equalsIgnoreCase("cm") || convertTo.equalsIgnoreCase("centimeter") || convertTo.equalsIgnoreCase("centimeters"))
convertedResult = CENTIMETERS_PER_MILE * value;
else if(convertTo.equalsIgnoreCase("m") || convertTo.equalsIgnoreCase("meter") || convertTo.equalsIgnoreCase("meters"))
convertedResult = METERS_PER_MILE * value;
else if(convertTo.equalsIgnoreCase("km") || convertTo.equalsIgnoreCase("kilometer") || convertTo.equalsIgnoreCase("kilometers"))
convertedResult = KILOMETERS_PER_MILE * value;
}
//millimeters
else if(convertFrom.equalsIgnoreCase("mm") || convertFrom.equalsIgnoreCase("millimeter") || convertFrom.equalsIgnoreCase("millimeters"))
{
if(convertTo.equalsIgnoreCase("in") || convertTo.equalsIgnoreCase("inch") || convertTo.equalsIgnoreCase("inches"))
convertedResult = INCHES_PER_MILLIMETER * value;
else if(convertTo.equalsIgnoreCase("ft") || convertTo.equalsIgnoreCase("foot") || convertTo.equalsIgnoreCase("feet"))
convertedResult = FEET_PER_MILLIMETER * value;
else if(convertTo.equalsIgnoreCase("mi") || convertTo.equalsIgnoreCase("mile") || convertTo.equalsIgnoreCase("miles"))
convertedResult = MILES_PER_MILLIMETER * value;
else if(convertTo.equalsIgnoreCase("mm") || convertTo.equalsIgnoreCase("millimeter") || convertTo.equalsIgnoreCase("millimeters"))
convertedResult = MILLIMETERS_PER_MILLIMETER * value;
else if(convertTo.equalsIgnoreCase("cm") || convertTo.equalsIgnoreCase("centimeter") || convertTo.equalsIgnoreCase("centimeters"))
convertedResult = CENTIMETERS_PER_MILLIMETER * value;
else if(convertTo.equalsIgnoreCase("m") || convertTo.equalsIgnoreCase("meter") || convertTo.equalsIgnoreCase("meters"))
convertedResult = METERS_PER_MILLIMETER * value;
else if(convertTo.equalsIgnoreCase("km") || convertTo.equalsIgnoreCase("kilometer") || convertTo.equalsIgnoreCase("kilometers"))
convertedResult = KILOMETERS_PER_MILLIMETER * value;
}
//centimeters
else if(convertFrom.equalsIgnoreCase("cm") || convertFrom.equalsIgnoreCase("centimeter") || convertFrom.equalsIgnoreCase("centimeters"))
{
if(convertTo.equalsIgnoreCase("in") || convertTo.equalsIgnoreCase("inch") || convertTo.equalsIgnoreCase("inches"))
convertedResult = INCHES_PER_CENTIMETER * value;
else if(convertTo.equalsIgnoreCase("ft") || convertTo.equalsIgnoreCase("foot") || convertTo.equalsIgnoreCase("feet"))
convertedResult = FEET_PER_CENTIMETER * value;
else if(convertTo.equalsIgnoreCase("mi") || convertTo.equalsIgnoreCase("mile") || convertTo.equalsIgnoreCase("miles"))
convertedResult = MILES_PER_CENTIMETER * value;
else if(convertTo.equalsIgnoreCase("mm") || convertTo.equalsIgnoreCase("millimeter") || convertTo.equalsIgnoreCase("millimeters"))
convertedResult = MILLIMETERS_PER_CENTIMETER * value;
else if(convertTo.equalsIgnoreCase("cm") || convertTo.equalsIgnoreCase("centimeter") || convertTo.equalsIgnoreCase("centimeters"))
convertedResult = CENTIMETERS_PER_CENTIMETER * value;
else if(convertTo.equalsIgnoreCase("m") || convertTo.equalsIgnoreCase("meter") || convertTo.equalsIgnoreCase("meters"))
convertedResult = METERS_PER_CENTIMETER * value;
else if(convertTo.equalsIgnoreCase("km") || convertTo.equalsIgnoreCase("kilometer") || convertTo.equalsIgnoreCase("kilometers"))
convertedResult = KILOMETERS_PER_CENTIMETER * value;
}
//meters
else if(convertFrom.equalsIgnoreCase("m") || convertFrom.equalsIgnoreCase("meter") || convertFrom.equalsIgnoreCase("meters"))
{
if(convertTo.equalsIgnoreCase("in") || convertTo.equalsIgnoreCase("inch") || convertTo.equalsIgnoreCase("inches"))
convertedResult = INCHES_PER_METER * value;
else if(convertTo.equalsIgnoreCase("ft") || convertTo.equalsIgnoreCase("foot") || convertTo.equalsIgnoreCase("feet"))
convertedResult = FEET_PER_METER * value;
else if(convertTo.equalsIgnoreCase("mi") || convertTo.equalsIgnoreCase("mile") || convertTo.equalsIgnoreCase("miles"))
convertedResult = MILES_PER_METER * value;
else if(convertTo.equalsIgnoreCase("mm") || convertTo.equalsIgnoreCase("millimeter") || convertTo.equalsIgnoreCase("millimeters"))
convertedResult = MILLIMETERS_PER_METER * value;
else if(convertTo.equalsIgnoreCase("cm") || convertTo.equalsIgnoreCase("centimeter") || convertTo.equalsIgnoreCase("centimeters"))
convertedResult = CENTIMETERS_PER_METER * value;
else if(convertTo.equalsIgnoreCase("m") || convertTo.equalsIgnoreCase("meter") || convertTo.equalsIgnoreCase("meters"))
convertedResult = METERS_PER_METER * value;
else if(convertTo.equalsIgnoreCase("km") || convertTo.equalsIgnoreCase("kilometer") || convertTo.equalsIgnoreCase("kilometers"))
convertedResult = KILOMETERS_PER_METER * value;
}
//kilometers
else if(convertFrom.equalsIgnoreCase("km") || convertFrom.equalsIgnoreCase("kilometer") || convertFrom.equalsIgnoreCase("kilometers"))
{
if(convertTo.equalsIgnoreCase("in") || convertTo.equalsIgnoreCase("inch") || convertTo.equalsIgnoreCase("inches"))
convertedResult = INCHES_PER_KILOMETER * value;
else if(convertTo.equalsIgnoreCase("ft") || convertTo.equalsIgnoreCase("foot") || convertTo.equalsIgnoreCase("feet"))
convertedResult = FEET_PER_KILOMETER * value;
else if(convertTo.equalsIgnoreCase("mi") || convertTo.equalsIgnoreCase("mile") || convertTo.equalsIgnoreCase("miles"))
convertedResult = MILES_PER_KILOMETER * value;
else if(convertTo.equalsIgnoreCase("mm") || convertTo.equalsIgnoreCase("millimeter") || convertTo.equalsIgnoreCase("millimeters"))
convertedResult = MILLIMETERS_PER_KILOMETER * value;
else if(convertTo.equalsIgnoreCase("cm") || convertTo.equalsIgnoreCase("centimeter") || convertTo.equalsIgnoreCase("centimeters"))
convertedResult = CENTIMETERS_PER_KILOMETER * value;
else if(convertTo.equalsIgnoreCase("m") || convertTo.equalsIgnoreCase("meter") || convertTo.equalsIgnoreCase("meters"))
convertedResult = METERS_PER_KILOMETER * value;
else if(convertTo.equalsIgnoreCase("km") || convertTo.equalsIgnoreCase("kilometer") || convertTo.equalsIgnoreCase("kilometers"))
convertedResult = KILOMETERS_PER_KILOMETER * value;
}
return convertedResult;
}
}
Here's my tester:
import java.util.Scanner;
public class UnitConverterTester
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Convert from: ");
String input = in.nextLine();
System.out.println("Convert to: ");
String output = in.nextLine();
System.out.println("Value: ");
double number = in.nextDouble();
UnitConverter one = new UnitConverter(input, output);
double converted = one.getValue(number);
System.out.print(number + " " + input + " " + "=" + " " + converted + " " + output);
}
}
Sorry that it's so long! Thanks for your time and help! :)
The expression
final double FEET_PER_INCH = (1/12);
will always setFEET_PER_INCH
to 0. This is because of integer division - neither operand is a floating-point value, so the floating point result is discarded.To fix it, you could either cast the division, or change a number to a decimal.
Example: