从告诉您度量单位是什么单位的用户输入开始,我希望能够将其转换为用户输入也以相同方式给出的最终单位
使用一个简单的Java单位转换器,其用法如下:
例如将1英尺转换为12英寸:
UnitConverter.convert(1, UnitConverter.Lengths.FEET, UnitConverter.Lengths.INCHES);
比方说,我让用户输入FEET作为字符串,输入INCHES作为其所需的输出。如何使用字符串变量来调用正确的方法?
我制作了一个将用户输入连接到正确单位的哈希图:
int startUnitNo;
int finalUnitNo;
HashMap<Integer, String> units = new HashMap<Integer, String>();
String startUnit;
String finalUnit;
//populate the units hashmap
units.put(1, "KILOGRAMS");
units.put(2, "POUNDS");
units.put(3, "METERS");
units.put(4, "FEET");
units.put(5, "INCHES");
units.put(6, "CENTIMETERS");
units.put(7, "MILLIMETERS");
units.put(8, "PIECE");
//ask for the units and get the string for it
System.out.println("Units: 1.KG 2.LB 3.M 4.FT 5.IN 6.CM 7.MM 8.PIECE");
startUnitNo = in.nextInt();
in.nextLine();
startUnit = units.get(startUnitNo);
//com.company.UnitConverter converter = new com.company.UnitConverter();
System.out.println("Final Units: 1.KG 2.LB 3.M 4.FT 5.IN 6.CM 7.MM 8.PIECE");
finalUnitNo = in.nextInt();
in.nextLine();
finalUnit = units.get(finalUnitNo);
//if statement to check if units are different, go ahead and convert the measurement
if (!finalUnit.trim().toLowerCase().equals(startUnit) && startUnitNo < 3 && finalUnitNo < 3)
{
//at this point I'm stuck, I have no Idea how to use the startUnit and finalUnit string as part of the converter method
}
答案 0 :(得分:1)
这就是我在方法中使用switch
的意思。您将从用户收到的String
输入作为参数传递:
public static void main(String[] args) {
convertUnits("feet"); //Pass user input instead
convertUnits("inches");
}
public static void convertUnits(String str)
{
str = str.toUpperCase();
switch (str) {
case "FEET":
System.out.println("Feet was called."); //Put what logic you need done in here
break;
case "INCHES":
System.out.println("Inches was called.");
break;
case "MILLIMETERS":
System.out.println("Millimeters was called.");
break;
//default:
//etc...
}
}
str.toUpperCase()
用于忽略用户输入时的区分大小写。
只要您需要转换给定的单位,此方法都可以轻松地重用代码。您可以传递用户输入,而不是传递硬编码的String
。在print
方法中的convertUnits
语句所在的位置插入所需的任何逻辑或代码,并添加所需的任何其他cases
或default
。
我认为switch
中确实没有太多被认为是的东西,这取决于您的需求。
编辑:
为了进一步帮助您,如果您希望能够与传入的任何单位进行相互转换,可以使用两种方法,每个方法中都带有一个开关,如下所示:
public static final String FEET = "FROMFEET";
public static final String INCHES = "INCHES";
public static final String MILLIMETERS = "MILLIMETERS";
public static void main(String[] args) {
checkUnits("feet","inches", 2);
checkUnits("inches","feet", 1);
}
public static void checkUnits(String from, String to, int units)
{
from = from.toUpperCase();
switch (from) {
case "FEET":
convertUnits(FEET,to, units);
break;
case "INCHES":
convertUnits(INCHES,to, units);
break;
case "MILLIMETERS":
convertUnits(MILLIMETERS,to, units);
break;
//default:
//etc...
}
}
public static void convertUnits(String from, String to, int units)
{
to = to.toUpperCase();
switch (to) {
case "FEET":
System.out.println("FROM: " + from + " to: " + to + " Units: " + units);
break;
case "INCHES":
System.out.println("FROM: " + from + " to: " + to + " Units: " + units);
break;
case "MILLIMETERS":
System.out.println("FROM: " + from + " to: " + to + " Units: " + units);
break;
//default:
//etc...
}
}
但是,您无需将我作为示例使用的public static final String
传递给convertUnits
,而是可以在转换单位的外部方法中传递需要使用的实际值(例如UnitConverter.Lengths.FEET
)。而不是print
中的convertUnits
语句,您可以调用该库convert方法。这样一来,您可以轻松地将所需的任何单位转换为。
它基本上是一个嵌套的switch
语句,但是将其放入两种方法中要干净得多。