有没有一种方法可以将用户输入的字符串用作来自另一个类的方法的方法调用的一部分

时间:2019-08-09 15:03:21

标签: java

从告诉您度量单位是什么单位的用户输入开始,我希望能够将其转换为用户输入也以相同方式给出的最终单位

使用一个简单的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
        }

1 个答案:

答案 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语句所在的位置插入所需的任何逻辑或代码,并添加所需的任何其他casesdefault

我认为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语句,但是将其放入两种方法中要干净得多。