初学者试图编写一个简单的计算器

NaC*_*114 0 java exception

我刚开始使用Java并试图编写一个简单的计算器:

我尝试了以下方法:

    double x, y; //inputs
    Scanner sc = new Scanner(System.in);
    System.out.println("x?");
    x = sc.nextDouble();
    System.out.println("y?");
    y = sc.nextDouble();

    double answer = 0;

    System.out.println("Operation type: (+,-,*,/)");


    String opStr= sc.nextLine();
    char op = opStr.charAt(0);


    switch(op)
    {
        case '+':
            answer=x+y;
            break;

        case '-':
            answer=x-y;
            break;

        case '*':
            answer=x*y;
            break;

        case '/':

            if (y==0)
            {
                System.out.println("Error, can't divide by zero");
            }
            else
            {
                answer=x/y;
            }

            break;
        default: System.out.println("Unkown operation");
    }  // switch end

    System.out.println("answer = " +x+op+y+"=" + answer);
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我得到以下内容:(我可以输入x和y,但之后我收到错误消息.

Operation type: (+,-,*,/)
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(String.java:686)
    at edf_1.EDF_1.main(EDF_1.java:170)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)
Run Code Online (Sandbox Code Playgroud)

如果有人能帮我找到错误或问题,真的很感激!

谢谢

NAC

Mar*_*oun 8

nextDouble() 处理行的结尾.因此,当您nextLine()再次呼叫时,它将输入您之前输入的enter(\n)作为输入.所以它正在跳过实际输入并吞下\n之前错过的输入nextLine().你应该nextLine()在真实之前打电话给另一个nextLine()(所以它会吞下\n).

如果您不想这样做,则应构建另一个Scanner而不是使用相同的对象.

这就是你的原因StringIndexOutOfBoundsException,opStr只是\n在这一点上.