如何在java中获得同时具有int选项或char选项(包括scanner)的switch语句 如何让用户为选择输入字符或数字?

如何在java中获得同时具有int选项或char选项(包括scanner)的switch语句 如何让用户为选择输入字符或数字?,java,char,int,switch-statement,java.util.scanner,Java,Char,Int,Switch Statement,Java.util.scanner,我应该使用什么类型的扫描仪,或者我应该创建多个扫描仪 现在代码可以处理任何数字,但当我输入一个字符时,会出现语法错误。任何想法或建议都会有帮助 public class Calc2 { private static void Menu(){ // print introduction System.out.println("Calculator"); } private static void Choice(){ //

我应该使用什么类型的扫描仪,或者我应该创建多个扫描仪

现在代码可以处理任何数字,但当我输入一个字符时,会出现语法错误。任何想法或建议都会有帮助

public class Calc2 {

    private static void Menu(){
        // print introduction
        System.out.println("Calculator");
    }

    private static void Choice(){
        // give 4 different calculations + a way to exit
        System.out.println("\nChoose which type of operation you want to do.");
        System.out.println("1. Addition");
        System.out.println("2. Subtraction");
        System.out.println("3. Multiplication");
        System.out.println("4. Division");
        System.out.println("5. Exit");
    }

    private static float Addition(){
        //Addition method
        System.out.println("Choose your first number");
        Scanner input = new Scanner(System.in);
        float num1 = input.nextFloat();
        System.out.println("Choose your second number");
        Scanner  input1 = new Scanner(System.in);
        float num2 = input1.nextFloat();
        float num3 = num1 + num2;
        System.out.printf("%f + %f = %f", num1, num2, num3);
        return num3;


    }
    private static float Subtraction(){
        //Subtraction method
        System.out.println("Choose your first number");
        Scanner input = new Scanner(System.in);
        float num1 = input.nextFloat();
        System.out.println("Choose your second number");
        Scanner  input1 = new Scanner(System.in);
        float num2 = input1.nextFloat();
        float num3 = num1 - num2;
        System.out.printf("%f - %f = %f", num1, num2, num3);
        return num3;


    }
    private static float Multiplication(){
        // multiplication method
        System.out.println("Choose your first number");
        Scanner input = new Scanner(System.in);
        float num1 = input.nextFloat();
        System.out.println("Choose your second number");
        Scanner  input1 = new Scanner(System.in);
        float num2 = input1.nextFloat();
        float num3 = num1 * num2;
        System.out.printf("%f X %f = %f", num1, num2, num3);
        return num3;


    }
    private static float Division(){
        // division method
        System.out.println("Choose your first number");
        Scanner input = new Scanner(System.in);
        float num1 = input.nextFloat();
        System.out.println("Choose your second number");
        Scanner  input1 = new Scanner(System.in);
        float num2 = input1.nextFloat();
        float num3 = num1 / num2;
        System.out.printf("%f / %f = %f", num1, num2, num3);
        return num3;


    }
    private static void Exit(){
        System.out.println("Thank you for using Gaurav's Calculator");
        System.exit(0);
    }


    public static void main(String[] args) {

        Menu();
        int input1;
        // call on the menu and choices
        do{

        Choice();
            Scanner operator = new Scanner(System.in);
             input1 = operator.nextInt();


        // get user input for what type of calculation




        // switch case to call on a method based on users choice of calculation

        switch(input1){
        case 1:
        case 'a':
        case 'A':
        Addition(); 
            break;
        case 2:
        case 's':
        case 'S':

        Subtraction();  
            break;
        case 3:
        case 'M':
        case 'm':
        Multiplication();
            break;
        case 4:
        case 'D':
        case 'd':

        Division(); 
            break;
        case 5:
        case 'e':
        case 'E':
            Exit();
            break;
        default:
            System.out.println("You chose a wrong number");

        }
    }while ( input1 !=5); 

    }
}

扫描仪读入一个字符
并使用

switch(input1) {
    case '1': case 'a': case 'A': Addition(); break;
    ...
}

您必须读入一个字符(或者更确切地说是字符串的第一个字符)

然后可以在以下情况下测试该字符:

case '1': case 'a': case 'A'

您的问题是,您正在读取的下一个输入仅为int。
尝试这样做:

     String reply = input.next(Pattern.compile("[1-5aAsSmMdDeE]"));
     int input1;
     try {
         input1 = Integer.parseInt(reply);
     } catch (NumberFormatingException e) {
         input1 = reply.charAt(0);
     }

享受。

我必须在字符中输入1吗?@user3117328从技术上讲,你不必(
int
大于
char
),但你可能应该这样做。如果可能的话,不应该使用异常来实现应用程序的逻辑。这被认为是有害的。在OP的例子中,他甚至不需要将它转换成整数。@cds,我不同意这种说法。异常是java编码的有效范例。@user2318564,这并不意味着您应该使用它们来处理应用程序逻辑。您不应该依赖于抛出异常的对象作为流的一部分。
     String reply = input.next(Pattern.compile("[1-5aAsSmMdDeE]"));
     int input1;
     try {
         input1 = Integer.parseInt(reply);
     } catch (NumberFormatingException e) {
         input1 = reply.charAt(0);
     }