Java 如何区分子例程中的数据类型?

Java 如何区分子例程中的数据类型?,java,Java,我的任务如下: 编写子例程以使用重载函数查找两个值中的最小值 int smallest (int a, int b) char smallest (char a, char b) float smallest (float a, float b) double smallest (double a, double b) 我必须使用Scanner类进行输入,并且在所有子例程中使用相同的代码。我的问题列在代码后面。非常感谢您的帮助 package subassignment; import ja

我的任务如下:

编写子例程以使用重载函数查找两个值中的最小值

int smallest (int a, int b)
char smallest (char a, char b)
float smallest (float a, float b)
double smallest (double a, double b)
我必须使用
Scanner
类进行输入,并且在所有子例程中使用相同的代码。我的问题列在代码后面。非常感谢您的帮助

package subassignment;

import java.util.Scanner;

public class Subassignment {

    public static void main(String[] args) {

        Scanner console = new Scanner (System.in);

        String a, b;
        int v1, v2, min;

        System.out.println("Enter a value: ");
        a = console.next();
        System.out.println("Enter another value: ");
        b = console.next();

        v1 = Integer.parseInt(a);
        v2 = Integer.parseInt(b);         
        min = larger(v1, v2);

        System.out.println(min);

    }
    public static int larger(int x, int y){
        if (x > y){
           return y;
        }
        else{
           return x;   
        }
    }
public static char larger(char x, char y){
    if (x > y){
      return y;
    }
    else{
      return x;   
    }
 }
public static float larger(float x, float y){
    if (x > y){
       return y;
    }
    else{
      return x;   
    }
}
public static double larger(double x, double y){
    if (x > y){
      return y;
    }
    else{
     return x;   
    }  
 }
}
程序只在我输入整数值时工作。我认为无论我输入什么数据类型
Integer.parseInt(a)
都会将其转换为整数值。我应该去哪里才能输入
float
double
char
的值。 假设我的输入是
g
,然后是
f
,我在编译器中得到以下消息:

Exception in thread "main" java.lang.NumberFormatException: For input string: "g"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:492)
    at java.lang.Integer.parseInt(Integer.java:527)
    at subassignment.Subassignment.main(Subassignment.java:20)
Java Result: 1
*回答后的第2次修订

package subassignment;

import java.util.Scanner;

public class Subassignment {

public static void main(String[] args) {
    Scanner console = new Scanner (System.in);

        String a, b;
        int i1, i2, i3, type;
        char c1, c2, c3;
        double d1, d2, d3;
        float f1, f2, f3;

        System.out.println("What is your data type: ");
        System.out.println("1 for int: 2 for char: 3 for double: 4 for float ");
        type = console.nextInt();
        System.out.println("Enter a value: ");
        a = console.next();
        System.out.println("Enter another value: ");
        b = console.next();

        switch (type){
        case 1:{
        i1 = Integer.parseInt(a);
        i2 = Integer.parseInt(b);         
        i3 = larger(i1, i2);
        System.out.println(i3);
        break;
        }
        case 2:{
        c1 = a.charAt(0);
        c2 = b.charAt(0);
        c3 = larger(c1, c2);
        System.out.println(c3);
        break;
        }        
        case 3:{
        d1 = Double.parseDouble(a);
        d2 = Double.parseDouble(b);
        d3 = larger(d1, d2);
        System.out.println(d3);
        break;
        }
        case 4:{
        f1 = Float.parseFloat(a);
        f2 = Float.parseFloat(b);
        f3 = larger(f1, f2);
        System.out.println(f3);
        break;
        }
      }
    }
    public static int larger(int x, int y){
    if (x > y){
    return y;
        }
    else{
     return x;   
        }
    }
public static char larger(char x, char y){
if (x > y){
    return y;
   }
    else{
     return x;   
        }
    }
public static float larger(float x, float y){
if (x > y){
    return y;
   }
    else{
     return x;   
        }
    }
public static double larger(double x, double y){
if (x > y){
    return y;
   }
    else{
     return x;   
        }  
    }
}

parseInt(字符串a)只适用于字符串到整数的转换,因此不适用于浮点、双精度或字符输入

Integer.parseInt(a)
尝试将
a
解释为
Integer
,而
“g”
不是。在调用较大的方法之前,必须首先检查输入是数字还是字符。重载函数与此匹配在哪里?您正在将所有内容转换为整数。。或者至少试着去做。此外,您也可以尝试console.nextInt(),尽管它仍然需要是一个有效的数字。您的老师真的使用术语subroutine吗?那太糟糕了。所以我必须在主体部分为每种不同的数据类型写单独的行?例如if-else语句(如果a是int,如果a是double,等等)?您可以扫描多个参数作为输入类型,并按如下方式解决此问题:-我认为不允许提示用户选择哪种数据类型。我假设计算机必须区分用户的输入。问题在于字符串到int、float、char和double的转换,以及将int、float、char和double存储到适当的数据类型。您可以使用我提供的下一个解决方案。您可以使用String.matches(String regex)来确定输入值是Int、char、float还是double,如下:-if(a.matches(“[a-Za-z]”){System.out.println(a+”是char”);}else if(a.matches(“[0-9]”){System.out.println(a+”是整数”);}else if(c.contains(“.”){//使用更好的方法匹配double System.out.println(c+“是double”);}否则{//浮点匹配代码}好的,我使用了switch语句,我成功了。非常感谢如来佛。我唯一需要做的是,我必须在案例之后使用break,这样它们就不会继续在循环中运行。有没有一种方法可以在没有break语句的情况下做到这一点,因为我的教授不会接受任何带有break语句的内容。*代码已经在上面进行了修改在前面的代码下面。我认为正则表达式将是更好的验证方法。请参阅下面我的评论
    You can scan one more input value and get the code working as below:-
    ......
.........
            System.out.println("Enter a Input Type Integer->1 :: Char->2 :: Float->3::Double->4 ");
    int inputType = console.next();
    System.out.println("Enter a value: ");
    a = console.next();
    System.out.println("Enter another value: ");
    b = console.next();
    int v1,v2,v3;
    char vc1,vc2,vc3;
    float vf1,vf2,vf3;
    double vd1,vd2,vd3;
    switch(inputType)
    {
    case 1:
    {
        v1 = Integer.parseInt(a);
        v2 = Integer.parseInt(b);
        v3=larger(v1,v2);
    }
    case 2:
    {
        vc1 = a.charAt(0);
        vc2 = b.charAt(0);
        vc3=larger(vc1,vc2);
    }
    case 3:
    {
        vf1 = Float.parseFloat(a);
        vf2= Float.parseFloat(b);
        vf3=larger(vf1,vf2);
    }
    case 4:
    {
        vd1 = Double.parseDouble(a);
        vd2 = Double.parseDouble(a);
        vd3=larger(vd1,vd2);
    }
    }
......
.......