简体   繁体   中英

Custom Java unit length converter with options in json file

I have a length unit converter written in Java. How can I implement the ability to expand the list of supported units by setting conversion rules via a JSON file?

Сlass ConversionCalculator:

package convert;
import java.util.Scanner;

public class ConversionCalculator
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);

        System.out.println("Convert from:");
        String fromUnit = in.nextLine();

        System.out.println("Convert to: ");
        String toUnit = in.nextLine();

        UnitConverter from = new UnitConverter(fromUnit);
        UnitConverter to = new UnitConverter(toUnit);

        System.out.println("Value:");
        double val = in.nextDouble();

        double meters = from.toMeters(val);
        double converted = to.fromMeters(meters);

        System.out.println(val + " " + fromUnit + " = " + converted + " " + toUnit);
    }
}

public class UnitConverter:


public class UnitConverter {
    static double INCHES = 0.0254001;
    static double FEET = 0.3048;
    static double MILES = 1609.35;
    static double MILLIMETERS = 0.001;
    static double CENTIMETERS = 0.01;
    static double METERS = 1;
    static double KILOMETERS = 1000;
    private double val, meters, converted;
    String afromUnit;

    public UnitConverter(String fromUnit) {
        afromUnit = fromUnit;
    }

    public double toMeters(double val) {
        if (afromUnit.equals("in")) {
            meters = (val * INCHES);
        } else if (afromUnit.equals("ft")) {
            meters = (val * FEET);
        } else if (afromUnit.equals("mi")) {
            meters = (val * MILES);
        } else if (afromUnit.equals("mm")) {
            meters = (val * MILLIMETERS);
        } else if (afromUnit.equals("cm")) {
            meters = (val * CENTIMETERS);
        } else if (afromUnit.equals("m")) {
            meters = (val * METERS);
        } else {
            meters = (val * KILOMETERS);
        }
        return meters;
    }

    public double fromMeters(double meters) {
        if (afromUnit.equals("in")) {
            converted = Math.round(meters * 39.369923740457715);
        } else if (afromUnit.equals("ft")) {
            converted = Math.round(meters * 3.280839895013123);
        } else if (afromUnit.equals("mi")) {
            converted = Math.round(meters * 0.0006213688756330196);
        } else if (afromUnit.equals("mm")) {
            converted = Math.round(meters * 1000);
        } else if (afromUnit.equals("cm")) {
            converted = Math.round(meters * 100);
        } else if (afromUnit.equals("m")) {
            converted = Math.round(meters * 1);
            ;
        } else {
            converted = Math.round(meters * 0.001);
        }
        return converted;
    }
}

If I understand correctly, then the values ​​of the coefficients must be added to the JSON file. After that, convert the JSON file to JAVA. Right? First time working with JSON files

Your JSON could look like this:

[{
  "name": "inches",
  "unit": "in",
  "conversion": "0.0254001",
}, {
  "name": "meter",
  "unit": "m",
  "conversion: "1",
}]

In JAVA you could do something like this to read it in:

JSONParser parser = new JSONParser();
Object obj = parser.parse(new FileReader(file));
JSONArray jsonArray = new JSONArray(obj.toString());
for (int i = 0; i < jsonArray.length(); i++) {
  JSONObject jsonObject = jsonArray.getJSONObject(i);
  System.out.println(jsonObject.get("name"));
  System.out.println(jsonObject.get("unit"));
  System.out.println(jsonObject.get("conversion"));
}

Solved the problem. Code part:

public static void main(String[] args) {

    String userJson = "[{\"unit\": \"in\", \"value\": \"11\", \"conversionto\": \"cm\"}," +
            "{\"unit\": \"ft\", \"value\": \"22\" , \"conversionto\": \"cm\"}]";
    Gson gson = new Gson();
    Type staffListType = new TypeToken<ArrayList<Staff>>(){}.getType();

    ArrayList<Staff> staffArray = gson.fromJson(userJson, staffListType);

    for(Staff staff : staffArray) {
        System.out.println(staff);
        String fromUnit = staff.unit;
        String toUnit = staff.conversionto;
        UnitConverter from = new UnitConverter(fromUnit);
        UnitConverter to = new UnitConverter(toUnit);
        double val = staff.value;
        double meters = from.toMeters(val);
        double converted = to.fromMeters(meters);

        System.out.println(val + " " + fromUnit + " = " + converted + " " + toUnit);



    }


}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM