Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有一种方法可以使用用户输入的字符串作为另一个类的方法调用的一部分_Java - Fatal编程技术网

Java 有没有一种方法可以使用用户输入的字符串作为另一个类的方法调用的一部分

Java 有没有一种方法可以使用用户输入的字符串作为另一个类的方法调用的一部分,java,Java,从告诉您度量单位的用户输入开始,我希望能够将其转换为用户输入以相同方式给出的最终单位 使用一个简单的Java单元转换器,如下所示: e、 g将1英尺转换为12英寸: UnitConverter.convert(1, UnitConverter.Lengths.FEET, UnitConverter.Lengths.INCHES); 假设我让用户以字符串的形式输入英尺,以英寸作为他们想要的输出。如何使用字符串变量调用正确的方法 我制作了一个hashmap,将用户输入连接到正确的单元: int

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

使用一个简单的Java单元转换器,如下所示:

e、 g将1英尺转换为12英寸:

 UnitConverter.convert(1, UnitConverter.Lengths.FEET, UnitConverter.Lengths.INCHES);
假设我让用户以字符串的形式输入英尺,以英寸作为他们想要的输出。如何使用字符串变量调用正确的方法

我制作了一个hashmap,将用户输入连接到正确的单元:

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
        }
int startUnitNo;
国际金融组织;
HashMap units=新的HashMap();
弦星体;
字符串finalUnit;
//填充单元hashmap
单位:千克(1);
单位。投入(2英镑);
单位。放置(3,“米”);
单位。放置(4英尺);
单位。放置(5英寸);
单位。放置(6,“厘米”);
单位。单位为(7,“毫米”);
单位。放置(8个,“件”);
//询问单位并获取字符串
系统输出打印件(“单位:1.KG 2.LB 3.M 4.FT 5.IN 6.CM 7.MM 8件”);
startUnitNo=in.nextInt();
in.nextLine();
startUnit=units.get(startUnitNo);
//com.company.UnitConverter converter=新的com.company.UnitConverter();
系统输出打印件(“最终单位:1.KG 2.LB 3.M 4.FT 5.IN 6.CM 7.MM 8件”);
finalUnitNo=in.nextInt();
in.nextLine();
finalUnit=units.get(finalUnitNo);
//如果要检查单位是否不同,请继续转换测量值
如果(!finalUnit.trim().toLowerCase().equals(startUnit)&&startUnitNo<3&&finalUnitNo<3)
{
//在这一点上,我被卡住了,我不知道如何使用startUnit和finalUnit字符串作为转换器方法的一部分
}

以下是我在方法中使用
开关的意思。将从用户处接收的
字符串
输入作为参数传递:

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()
用于忽略用户输入的大小写敏感度

此方法允许在需要转换给定单元时轻松重用代码。您可以传递用户输入,而不是传递硬编码的
字符串。在
convertUnits
方法中的
print
语句处插入所需的任何逻辑或代码,并添加所需的任何其他
案例,或
默认值

我不认为在
开关
中考虑太多的东西,它只是取决于您需要什么

编辑:

为了进一步帮助您,如果您希望能够转换传递的任何单位,您可以使用两种方法,每个方法中都有一个开关,如下所示:

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...
    }
}
但是,您可以传递转换单位的外部方法(如
UnitConverter.length.FEET
)中需要使用的实际值,而不是将我用作示例的
public static final字符串传递给
converter units
)。而不是
convertUnits
中的
print
语句,而是调用libraries convert方法。这将允许您相当容易地将任何想要的单位转换为任何想要的单位


它基本上是一个嵌套的
switch
语句,但是将它放在两个方法中要干净得多

你试过什么?请发布相关代码以及您有什么问题。我添加了设置如何转换值的代码。我只是被困在如何使用字符串作为转换器方法的一部分。有什么想法吗?你是说如果
字符串
FEET
你想调用FEET的方法吗?如果
语句比较了
字符串
,为什么不直接使用
,然后为这两种情况调用正确的语句呢?或者一个
开关
有很多情况。如果您需要在很多地方使用检查,那么您可以将
开关
提取到一个将
字符串
作为参数的方法。啊,聪明的主意。那我可以用开关了。我在计算,如果我必须编码2(质量)+20(长度)可能的转换,那么一堆if语句可能并不理想。你会考虑多少开关箱?将开关提取到采用字符串参数的方法是什么意思?谢谢你的帮助啊,上帝保佑,那太好了,明白了。是的,我会用开关分别对22个案例进行编码。谢谢你的帮助@Sephos不确定这是否会对您有更多帮助,但我添加了一种更具体的方法用于您的案例,如果您希望从2个用户输入的
String
s而不是1转换单位。