Java动态var分配给变量

问题描述:

我有一个鸡和鸡蛋的问题。我用于动态打字(python),所以如果这是一件基本的事情,请对我温柔。Java动态var分配给变量

我有一个扫描仪,但我想让用户输入一个字符串或一个整数(1或'option1')。因为它是用户输入,所以我不知道结果类型(int或string)。我需要从扫描器获取用户输入,将其分配给一个变量,然后将该变量传递给重载方法。

问题是我需要声明变量类型。但是,它可以是。我该如何处理?

编辑

为了澄清,我想这样做这样的事情(下面是伪代码):

public static float methodname(int choice){ 
//some logic here 
} 

public static float methodname(String choice){ 
//some logic here 
} 

Scanner input = new Scanner(System.in); 

choice = input.nextLine(); 

System.out.println(methodname(choice)); 

说我遇到的问题是“选择”的声明。我为这种类型放了什么?

+0

只是让它成为'String'并检查它是否只是数字或之后。如果它解析为'int'。 – SomeJavaGuy

+0

我如何检查它的数字,如果我把它作为一个字符串?如果我把它作为一个字符串wouldnt它是一个字符串? – PyNoob

+0

字符串'“1”'只包含数字,所以它可以被解析为一个int。字符串“”option1“'包含字母,因此您不能将其转换为字符串。 – puhlen

您可以将其作为String并尝试将其转换为int。如果转换没有问题,您可以使用int版本,否则使用String版本。

String stringValue = ... 

try { 
    // try to convert stringValue to an int 
    int intValue = Integer.parseInt(stringValue); 
    // If conversion is possible you can call your method with the int 
    call(intValue); 
} catch (NumberFormatException e) { 
    // If conversion can't happen call using the string 
    call(stringValue); 
} 
+0

重要的是要注意,但如果OP允许“option1”或“选项1”,您需要在尝试解析剩余的内容之前去掉所有不是数字的字符。 – Jacob

+0

@Jacob是的,我认为stringValue是“1”,而不是“选项1”。如果它是“选项1”,则调用字符串版本 –

取输入值的字符串,将其转换使用

String number = "1"; 
int result = Integer.parseInt(number); 

如果解析,那么你可以继续使用它作为一个数量为整数。如果失败它将抛出NumberFormatException。所以你可以捕捉异常并用字符串继续。

try{ 
    String number = "option1"; 
    int result = Integer.parseInt(number); 
    // proceed with int logic 
} catch(NumberFormatException e){ 
    // handle error and proceed with string logic 
}