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)
# 1 楼答案
0只能引用
jumpTable
。。3个指数。但是你试图用“+”号来引用它,这超出了这个范围。考虑使用^ {CD2>}以这样的方式存储操作:# 2 楼答案
将被转换为
+
符号的ASCII码(43)(它被转换为char
),留下一个0-4范围之外的数字。您可能希望使用实际的数字索引(或者确保数组可以包含字符值集的最高数字表示形式,在本例中是47 by/
)ASCII table: