Java 如何使用重载方法(区分int或double)

Java 如何使用重载方法(区分int或double),java,overloading,Java,Overloading,我需要编写一个程序,从用户那里获取三个数字,然后将它们传递给一个重载方法,我有一个double和int 我的问题是如何确定它是int还是double 要获取输入,我将执行以下操作: Scanner input = new Scanner( System.in ); double number1 = input.nextDouble(); // read first double double number2 = input.nextDouble(); // read second double

我需要编写一个程序,从用户那里获取三个数字,然后将它们传递给一个重载方法,我有一个double和int

我的问题是如何确定它是int还是double

要获取输入,我将执行以下操作:

Scanner input = new Scanner( System.in );
double number1 = input.nextDouble(); // read first double
double number2 = input.nextDouble(); // read second double
double number3 = input.nextDouble(); // read third double

MyMathOps MyMathOps = new  MyMathOps();
double result = MyMathOps.maximum( number1, number2, number3 ); 
System.out.println(result);

但是如果他们输入int呢?我希望能够确定这一点,并将其传递给int-maxium方法。

只需将所有输入视为double,因为您支持浮点输入。有时仅仅因为输入恰好是整数而使用int是没有意义的。

只要将所有输入都视为双精度输入,因为您支持浮点输入。有时仅仅因为输入恰好是整数就使用int是没有意义的。

number1、number2和number3都声明为双精度。即使它们将包含一个整数值,它们仍将是双倍值,即值1.0

如果您想知道,双精度值也可以表示为整数值,您可以将双精度值转换为字符串:

String doubleString = Double.valueOf(number1)
围绕小数点拆分字符串:

String[] split = doubleString.split("\\.");
然后检查小数部分,使其仅包含零:

boolean canBeInt = split[1].matches("0*");
如果为true,则可以运行Integer.parseIntsplit[0]并获取整数值,或者将原始的double强制转换为int


注意:此解决方案不会检查最大整数值。

number1、number2和number3都声明为双精度。即使它们将包含一个整数值,它们仍将是双倍值,即值1.0

如果您想知道,双精度值也可以表示为整数值,您可以将双精度值转换为字符串:

String doubleString = Double.valueOf(number1)
围绕小数点拆分字符串:

String[] split = doubleString.split("\\.");
然后检查小数部分,使其仅包含零:

boolean canBeInt = split[1].matches("0*");
如果为true,则可以运行Integer.parseIntsplit[0]并获取整数值,或者将原始的double强制转换为int


注意:此解决方案不会检查最大整数值。

实际上有几种方法可以做到这一点。例如,您可以使用input.next而不是input.nextDouble并解析返回的字符串,以检查数据类型是否以整数的最大值为界并且不包含小数部分。实际上,有几种方法可以做到这一点。例如,您可以使用input.next而不是input.nextDouble并解析返回的字符串,以检查数据类型是否以整数的最大值为界并且不包含小数部分

当然,如果输入int,它们将自动升级为double。为什么需要确定要输入的特定类型?当然,如果输入int,它们会自动升级为double。为什么需要确定要输入的特定类型?你应该把它交给编译器。如果你这样做,最好使用next或nextLine,对用户真正输入的内容进行解析。String[]split=doubleString.split。;除非你逃出了这个点,否则不会起作用。像这样的字符串[]split=doubleString.split\\。;如果要这样做,最好使用next或nextLine,对用户真正输入的内容进行解析。String[]split=doubleString.split。;除非你逃出了这个点,否则不会起作用。像这样的字符串[]split=doubleString.split\\。;我认为所有int都适合一个double,因为它有64位。浮动会有问题。反对被撤回+1我认为所有int都适合一个double,因为它有64位。浮动会有问题。反对被撤回+1.