-1

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

欢迎来到表达式程序
输入一行表达式:
( 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) () (hello +friend ) ( 1 * 2 + 4 ) 7+8+9)
“(6)”的值为6
ERROR: “” is not一个整数
错误:“hello”不是整数
错误:“*”不是有效的运算符
错误:非法起始字符 '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;
}   
}
4

2 回答 2

1

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

于 2013-09-23T21:21:15.470 回答
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使用该变量,而不是。还要确保在返回 -1 时处理这种情况(它找不到加号);如果你只是将它传递给,你会得到另一个越界错误。signsubstringindexOfa.substring

于 2013-09-23T21:30:47.713 回答