【问题标题】:Beginner trying to program a simple calculator初学者尝试编写一个简单的计算器
【发布时间】:2014-03-04 10:47:47
【问题描述】:

我刚开始使用 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)

如果有人能帮我找出错误或问题,我将不胜感激!

谢谢

氯化钠

【问题讨论】:

  • 您在使用xy 后是否正在清空缓冲区?如果没有,nextLine() 将为您执行此操作,并且将为opStr 分配一个空行,因此charAt(0) 将引发异常。
  • 另外,开头是:String result = "Answer = " + x + "" + op + "" + y + "=" + answer; System.out.println(result);

标签: java exception


【解决方案1】:

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

如果你不想这样做,你应该构造另一个Scanner,而不是使用同一个对象。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      当我开始学习 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;
      
      } 
      }
      
      }
      

      不客气。

      【讨论】:

        猜你喜欢
        • 2013-01-30
        • 1970-01-01
        • 2013-04-21
        • 1970-01-01
        • 2020-05-04
        • 2012-07-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-21
        相关资源
        最近更新 更多