英语翻译publicdoubleCalculator(Str-查字典问答网
分类选择

来自郭耘的问题

  英语翻译publicdoubleCalculator(Stringf)//计算{inti=0,j=0,k;charc;StringBuffers=newStringBuffer();s.append(f);s.append('=');Stringformula=s.toString();//转化为string类型char[]anArray;anArray=newchar[50];Stackmystack=newStack();w

  英语翻译

  publicdoubleCalculator(Stringf)//计算

  {

  inti=0,j=0,k;

  charc;

  StringBuffers=newStringBuffer();

  s.append(f);

  s.append('=');

  Stringformula=s.toString();//转化为string类型

  char[]anArray;

  anArray=newchar[50];

  Stackmystack=newStack();

  while(formula.charAt(i)!='=')

  {

  c=formula.charAt(i);

  switch(c)

  {

  case'+':

  case'-':

  while(!mystack.empty()&&mystack.peek().charValue()!='/')

  {

  anArray[j++]=mystack.pop().charValue();

  }

  mystack.push(newCharacter(c));

  i++;

  break;

  case'*':

  case'/':

  while(!mystack.empty()&&(mystack.peek().charValue()=='*'||mystack.peek().charValue()=='/'))

  {

  anArray[j++]=mystack.pop().charValue();

  }

  mystack.push(newCharacter(c));

  i++;

  break;

  default:while((c>='0'&&c

5回答
2020-04-09 14:16
我要回答
请先登录
常慧岭

  一般你这种要出入栈的计算器是可以计算表达式的,如可以直接输入2-4*3+4,一般有两个栈,数字栈和符号栈,如上面表达式,数字栈压入2,4;符号栈压入-;当取*号的时候,因为*的优先级比-大所有会将4弹出和3运算然后将12压回数字栈,结果是2,12;符号栈是-;然后取+,比较+与-优先级,同级的从左都右运算,直接压入栈,数字栈为2,12,4;符号栈是-,+;遇到表达式结束符,然后弹出一个符号两个数,运算后将结果压回数字栈,弹出加号,结果是2,16;弹出减号是最终结果14;然后输出结果.要是有括号的可以递归括号内的表达式.详细可百度表达式的栈运算.程序我没看,很多又没格式.

2020-04-09 14:17:13
郭耘

  那请问这程序里面有数字栈么

2020-04-09 14:17:51
常慧岭

  刚看了一下,以下这段程序是先将表达式转换为后缀表达式,然后再运算,和我上述所讲的原理差不多,只不过多了一个formula字符串变量,用以先存储后缀表达式,然后再用Stackmystack1这个栈存储计算结果。我大概跟你说说程序的意思。后缀表达式例如:1+3*4-5;后缀表达式为:134*+5-,每个符号的前面两个数运算,结果放原位。转换后缀表达式用一个符号栈就行了。字数过多,不多说了,我只能做到这样了。建议查阅相关知识。s.append('=');//表达式加上一个'='表示结束Stringformula=s.toString();//转化为string类型char[]anArray;anArray=newchar[50];//用以存储后缀表达式Stackmystack=newStack();//转换后缀表达式需要用到的符号栈while(formula.charAt(i)!='=')//该表达式并没有到结束{c=formula.charAt(i);//依次取字符switch(c){case'+':case'-':while(!mystack.empty()&&mystack.peek().charValue()!='/')//涉及到优先级,故需要判断,要是堆栈中的符号优先级大于当前符号,'/'和'*'比'+-'大,跳过这步;否则将里面的符号出栈放到anArray中。{anArray[j++]=mystack.pop().charValue();}mystack.push(newCharacter(c));//将符号压入符号栈i++;break;default:while((c>='0'&&c

2020-04-09 14:21:44
郭耘

  您好,请问formula是用来存储后缀表达式的?那anArray呢?1+3*4-5的中间结果3*4=12存在哪?anArray里?Stackmystack=newStack();符号栈Stackmystack1=newStack();数字栈?anArray[j++]=mystack.pop().charValue();符号出栈到anArray又入栈到符号栈mystack1.push(newDouble(d));结果入数字栈?这两个栈之间通过什么联系?anArray?表达式最终的结果存在哪里?

2020-04-09 14:24:48
常慧岭

  哦,一时看错了,是anArray用以存储后缀表达式,formual是用来存放程序输入的表达式。两个栈是通过anArray联系。表达式的最终结果在Stackmystack1里面,程序将最后的计算结果以return(mystack1.peek().doubleValue());返回。凡是中间运算结果都以mystack1存储。Stackmystack=newStack();是符号栈Stackmystack1=newStack();是数字栈anArray[j++]=mystack.pop().charValue();符号出栈到anArray又入栈到符号栈:不是,mystack是用来存储运算符号的,根据当前取到的字符和栈中的运算符比较优先级,然后再决定栈中的运算符是否弹出栈到anArray;mystack1.push(newDouble(d));结果入数字栈?:其中会包括中间结果,但最后运算会使栈中只有一个最终结果。

2020-04-09 14:26:39

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •