接受表达式的Java计算器

时间:2013-09-23 21:17:40

标签: java calculator

我正在尝试制作一个计算器,用于添加和减去用户输入的括号中的数字。 这是一个示例运行:

  

欢迎来到表达程序
  输入一行表达式:
  (2 + 3 + -4 + 5)(6 + 7 + 8 + -9)(3 + -2 + 7 + 0)
  “(2 + 3 + -4 + 5)”的值为6
  “(6 + 7 + 8 + -9)”的值为12
  “(3 + -2 + 7 + 0)”的值为8
  再见!


  

欢迎来到表达程序
  输入一行表达式:
  (6)()(你好+朋友)(1 * 2 + 4)7 + 8 + 9)
  “(6)”的值为6
  错误:“”不是整数
  错误:“你好”不是整数
  错误:“*”不是有效的操作员
  错误:非法开始角色'7'再见!

这是我到目前为止所做的,但它不起作用:

import java.util.Scanner;
public class ExprParser 
{
public static void main(String args[])
{

    Scanner g=new Scanner(System.in);
    System.out.println("Welcome to the Expression Program!");
    System.out.println("Enter a line of expressions(between parenthesis):");
    String exp=g.next();
    String[] arr=exp.split("\\)");

    for (int i = 0; i < arr.length; ++i) 
    {   System.out.println(arr[i]+")");
        int result=calculate(arr[i]);
        System.out.println(calculate(Integer.toString(result)));
    }
}

public static int calculate(String a)
{
    int sum=0;
    for (int i=0;i<a.length();++i)
    {

        char sign='+';
        a.indexOf(sign);

             sum+=Integer.parseInt(a.substring(0,sign))+Integer.parseInt(a.substring(sign+1,sign));

    }
    return sum;
}   
}

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是反向波兰表示法,它允许您评估表达式。这里有一个视频解释了它的工作原理:http://www.youtube.com/watch?v=QzVVjboyb0s

答案 1 :(得分:0)

在此代码中:

    char sign='+';
    a.indexOf(sign);   
    sum+=Integer.parseInt(a.substring(0,sign))+Integer.parseInt(a.substring(sign+1,sign));

sign是一个字符,字符实际上是整数值。字符'+'的值为43(这是加号在ASCII图表上的位置)。因此,您正在尝试计算a.substring(0,43),如果a短于43个字符,则会出现越界错误。

您使用indexOf找出'+'符号的位置,但是您丢弃了结果。将indexOf的结果存储在变量中,然后在sign调用中使用该变量,而不是substring。还要确保在indexOf返回-1时处理大小写(它找不到加号);如果您只是将其传递给a.substring,则会出现另一个越界错误。