java - 接受计算器程序的输入

标签 java arrays indexoutofboundsexception

我希望程序接受操作符号(+、-、*、/)作为输入。每当我这样做时,它就会抛出异常。任何人都可以帮我解决这个问题并使程序接受这些标志之一作为输入。

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)

最佳答案

jumpTable['+']

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

ASCII table :

enter image description here

关于java - 接受计算器程序的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19412073/

相关文章:

java - 如何在java中将 boolean 列添加到结果集中,然后将结果添加到jtable

java - 验证php中的JAVA签名

c - 使用 C 使用随机数填充和打印数组

java - ArrayIndexOutOfBounds,不明白为什么?

java - 填充多维数组时 IndexOutOfBounds 异常

java - Android ListView 只显示最新的项目

java - 如何在Java中使用自动代理配置脚本

javascript - new Array(7) 和 Array.apply(null, Array(7)) 的区别

php - 在 php 中的 foreach 循环中增加数组元素?

java - 用java制作一个包含数组和文件输入的表格