自定义 Java 单位长度转换器,带有 json 文件中的选项

Custom Java unit length converter with options in json file

我有一个用 Java 编写的长度单位转换器。如何通过 JSON 文件设置转换规则来实现扩展支持单位列表的功能?

Сclass 转换计算器:

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 单位转换器:


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;
    }
}

如果我没理解错的话,那么系数的值一定要加到JSON文件中。之后,将 JSON 文件转换为 JAVA。正确的?第一次使用 JSON 个文件

您的 JSON 可能如下所示:

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

在 JAVA 中你可以做这样的事情来阅读它:

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"));
}

问题解决了。代码部分:

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);



    }


}