自定义 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);
}
}
我有一个用 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);
}
}