有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为计算器程序接收输入

我希望程序接受操作符号(+、-、*、/)作为输入。每当我这样做,它就会抛出一个异常。有人能帮我解决这个问题,让程序接受这些符号中的一个作为输入吗

import java.lang.*;
import java.util.*;

public class Calculator
{
    private double solution;
    private static double x, y;
    private static char ops;

    public static interface Calculate
    {
        public abstract double operation(double x, double y);
    }

    public static class addition implements Calculate
    {
       public double operation(double x, double y){
         return(x+y);
       }
    }

    public static class subtraction implements Calculate
    {
       public double operation(double x, double y){
         return(x-y);
       }
    }

    public static class multiplication implements Calculate
    {
       public double operation(double x, double y){
         return(x*y);
       }
    }

    public static class division implements Calculate
    {
       public double operation(double x, double y){
         return(x/y);
       }
  }

    public void calc(int ops){
         Scanner operands = new Scanner(System.in);

         System.out.println("operand 1: ");
         x = operands.nextDouble();
         System.out.println("operand 2: ");
         y = operands.nextDouble();

         System.out.println("Solution: ");

         Calculate [] jumpTable = new Calculate[4];
         jumpTable['+'] = new addition();
         jumpTable['-'] = new subtraction();
         jumpTable['*'] = new multiplication();
         jumpTable['/'] = new division();

         solution = jumpTable[ops].operation(x, y);

         System.out.println(solution);
    }

    public static void main (String[] args)
    {
      System.out.println("What operation? ('+', '-', '*', '/')");
      System.out.println(" Enter 0 for Addition");
      System.out.println(" Enter 1 for Subtraction");
      System.out.println(" Enter 2 for Multiplication");
      System.out.println(" Enter 3 for Division");

      Scanner operation = new Scanner(System.in);
      ops = operation.next().charAt(0);

      Calculator calc = new Calculator();
      calc.calc(ops);
  }
}

错误是

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 43
at Calculator.calc(Calculator.java:54)
at Calculator.main(Calculator.java:76)

共 (2) 个答案

  1. # 1 楼答案

    0只能引用jumpTable。。3个指数。但是你试图用“+”号来引用它,这超出了这个范围。考虑使用^ {CD2>}以这样的方式存储操作:

    Map<String, Calculate> jumpTable = new HashMap<String, Calculate>();
    jumpTable.put("+", new addition());
    jumpTable.put("-", new subtraction());
    jumpTable.put("*", new multiplication());
    jumpTable.put("/", new division());
    
    String operation = Character.toString((char) ops);
    solution = jumpTable.get(operation).operation(x, y);
    
  2. # 2 楼答案

    jumpTable['+']
    

    将被转换为+符号的ASCII码(43)(它被转换为char),留下一个0-4范围之外的数字。您可能希望使用实际的数字索引(或者确保数组可以包含字符值集的最高数字表示形式,在本例中是47 by /

    ASCII table

    enter image description here