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

时间:2013-09-29 12:11:27

标签: 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);

当我尝试运行它时,我得到以下内容:(我可以输入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)

如果有人能帮助我找到错误或问题,我将非常感激!

谢谢

NAC

3 个答案:

答案 0 :(得分:8)

nextDouble() 不会处理该行的结尾。因此,当您再次致电nextLine()时,它会将您之前输入的输入\n)作为输入。因此,它会跳过实际输入,并从\n错过的上一个输入中吞下nextLine()。您应该在真实nextLine()之前调用另一个nextLine()(因此它会吞下\n)。

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

这是StringIndexOutOfBoundsException的原因,此时opStr只是\n

答案 1 :(得分:0)

问题是,在读取双精度后,扫描仪输入不为空。因此,nextLine()的调用立即返回,将最后一个不可解析的输入的部分作为浮点值(可能为空)返回。如果在请求操作之前调用sc.nextLine(),则下一次调用sc.nextLine()会读取包含您操作的行。

答案 2 :(得分:0)

当我开始学习java时,我构建了世界上最简单的计算器。这应该适合你:

import java.util.Scanner;
public class CalculatorProgram {
Scanner scan = new Scanner(System.in);
int N1;
int N2;
int O = 0;
System.out.println("Enter the first number:");
N1 = scan.nextInt();
System.out.println("Enter the second number:");
N2 = scan.nextInt();
System.out.println("Press 1 for addition, 2 for subtraction, 3 for multiplication, 4 for       division
O=scan.nextInt();
switch (O){
case 1:
O=N1+N2;
System.out.println(O);
break;
case 2:
O=N1-N2;
System.out.println(O);
break;
case 3:
O=N1*N2;
System.out.println(O);
break;
case 4:
O=N1/N2;
System.out.println(O);
break;

default:
System.out.println("That is an invalid selection. Thank you for using this program.");
break;

} 
}

}

欢迎你。