求助:解决多位数的运算

问题描述

javacodepackagecounter;importjava.util.Stack;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JTextField;classMiddleToLast{publicintprior(charop){if(op=='+'||op=='-')return1;if(op=='*'||op=='/')return2;return0;}publicStringmiddleToLast(Stringmiddle){Stackop=newStack();Stringans=newString();charc[]=newchar[50];String[]s=newString[50];Stringms=newString();intj=0;for(inti=0;i<middle.length();i++){charch=middle.charAt(i);if(ch>='0'&&ch<='9'){c[j]=ch;j++;}else{if(ch=='('){op.push(Character.valueOf(ch));}else{if(ch==')'){while(((Character)op.peek()).charValue()!='('){c[j]=((Character)op.peek()).charValue();j++;op.pop();}op.pop();}elseif(ch=='+'||ch=='-'||ch=='*'||ch=='/'){if(op.empty())op.push(Character.valueOf(ch));else{if(prior(ch)>prior(((Character)op.peek()).charValue())){op.push(Character.valueOf(ch));}else{while(!op.empty()&&prior(ch)<=prior(((Character)op.peek()).charValue())){c[j]=((Character)op.peek()).charValue();j++;op.pop();}op.push(Character.valueOf(ch));}}}}}}while(!op.empty()){c[j]=((Character)op.peek()).charValue();j++;op.pop();}ans=String.valueOf(c,0,j);returnans;}}classCompute{privateStrings=newString();privateMiddleToLastmtl=newMiddleToLast();publicCompute(){this("");}publicCompute(Strings){this.s=s;}publicvoidsetComputeString(Strings){this.s=s;}publicStringgetComputeString(){returnthis.s;}publicStringgetLastComputeString(){returnthis.mtl.middleToLast(this.s);}publicintgetResult(){intright=0,left=0,result=0;Stacknumber=newStack();number.push(Character.valueOf('='));charc;Stringlast=this.mtl.middleToLast(this.s);for(inti=0;i<last.length();i++){c=last.charAt(i);if(!isOperateSign(c))number.push(Integer.valueOf(c-48));if(isOperateSign(c)){right=((Integer)number.pop()).intValue();left=((Integer)number.pop()).intValue();result=this.ComputeResult(right,left,c);number.push(Integer.valueOf(result));}}returnresult;}publicintComputeResult(intright,intleft,charop){intresult=0;switch(op){case'+':result=left+right;break;case'-':result=left-right;break;case'*':result=left*right;break;case'/':result=left/right;break;}returnresult;}publicbooleanisOperateSign(charc){if(c=='+'||c=='-'||c=='/'||c=='*')returntrue;elsereturnfalse;}}publicclasstestextendsJFrameimplementsActionListener{privatestaticfinallongserialVersionUID=1L;privateJTextFieldjtf;privateJButtonjb;privateStrings=newString();Computecp;publictest(){super("姚健的计算器");jtf=newJTextField();jtf.setSize(200,30);jtf.setLocation(5,5);jb=newJButton("计算");jb.addActionListener(this);jb.setSize(70,30);jb.setLocation(5,50);setLayout(null);add(jtf);add(jb);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(getToolkit().getScreenSize().width/2-150,getToolkit().getScreenSize().height/2-150,300,300);setVisible(true);}publicvoidactionPerformed(ActionEvente){this.s=jtf.getText();intresult=this.count(s);System.out.println("s"+"="+result);this.jtf.setText(s);}publicintcount(Strings){intresult=0;Computecp=newCompute(s);result=cp.getResult();returnresult;}publicstaticvoidmain(String[]args){newtest();}}可以实现个位数的加减乘除,但是多位数的运算就没则了,请求各位大大们帮忙解决

时间: 2024-11-05 06:25:23

求助:解决多位数的运算的相关文章

c++的问题-【新手求助】关于“++”的运算

问题描述 [新手求助]关于"++"的运算 大家好,我是一个大一新生,我现在学习到"++"的运用 int main(){ int a=30; int b,c; b=a++ ,c=++a; cout<<"a="<<a<<endl; cout<<"b="<<b<<endl; cout<<"c="<<c<<e

解决JS浮点数运算出现Bug的方法_javascript技巧

37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎么可能多出这么小数点出来. 我Google了一下,发现原来这是JavaScript浮点运算的一个bug. 比如:7*0.8 JavaScript算出来就是:5.6000000000000005 网上找到了一些解决办法,就是重新写了一些浮点运算的函数或直接扩大倍数运算. 下面就把这

求助解决办法,eclipse报错“The import org.apache.commons.math cannot be resolved”

问题描述 在eclipse中发布项目时,eclipse报错显示"Theimportorg.apache.commons.mathcannotberesolved",通过添加Commons.jar包,编译后问题依然存在.现在很疑惑,不知道怎么去解决了,想向前辈们咨询一下. 解决方案 解决方案二:Clear一下试试.解决方案三:还是不可以,问题还是存在!解决方案四:包添加进去以后要刷新几下,如果不行.重新开一下eclipse然后再刷新.你可以发个图上来帮你看看.解决方案五:看jar中是否有

求助解决不能重复积分

问题描述 积分规则:同一课程重复学习(重复点击)重复积分.(是不能重复得积分?)(比如挂一门课程,点击2次,就是2个积分) 解决方案 解决方案二:这个看你怎么响应了,可以支持重复提交就是解决方案三:楼主你想说神马?解决方案四:引用一句话,"不是你高估了我的理解能力,就是你低估了自己的表达能力",不知所云!解决方案五:这个你的设置一个标志可以在数据库里也可以在程序里看你整么设计的点击的时候检查一下比如设置一个int开始是1点一下就变成2点击之前检查一下这个int是2的话就是以前已经点击了

mybatis-求助解决 myBatis 使用pool2和dbcp2 出现的空指针异常

问题描述 求助解决 myBatis 使用pool2和dbcp2 出现的空指针异常 本人在项目中使用了 Struts2/Spring3.5/myBatis2 的开源框架,并且将原有的 commons pool 1.x 和 commons dbcp 1.x升级到了 pool2 和 dbcp2 版本, 但总是出现 数据库连接池 在 evict() 时的空指针异常,求高手赐教-! 解决方案 http://www.iteye.com/problems/129311

IT支持不足以解决手机的安全问题

当人们的手机出现故障时,通常把它带到当地的电话销售商或大型零售商进行测试,或者拨打IT电话热线求助解决这个问题.但是简单的IT支持并不足以解决问题.有时,为了让其手机再次工作,保证信息安全,或者从中获取其想要的数据. 以下是可能需要排除基本故障提供帮助的几个因素: (1)检索信息 如果你正在使用手机,突然间失去了一切.其中包括手机存储的所有的照片,甚至是孩子的照片或珍贵的毕业照.手机坏了却不来及保存,那么现在他们永远消失了? 在作为证据方面,移动设备取证有时可以从已损坏,擦除或损坏的手机中检索图

服务器用双核处理器优势何在

服务器 英特尔预计: 在2006年将有超过85%的服务器处理器采用双核或多核架构.现将读者对双核技术的一些疑惑和问题进行整理解答,以便其共享.那到底什么是双核处理器? 简单的说,所谓双核处理器就是在一个处理器基板上集成两个功能相同的处理器核心,即将两个物理处理器核心整合入一个内核中.处理器实际性能是处理器在每个时钟周期内所能处理指令数的总量,因此增加一个内核,处理器每个时钟周期内可执行的单元数将增加一倍. 事实上,将两个处理器内核放到一个物理核心之上并不是什么新技术.在上个世纪末期,高端多处理机

F#简明教程一:F#与函数式编程概述

F#是微软.NET开发平台的一门编程语言,其最大的特点是对函数式编程(FP,FunctionalProgramming)的引入:F#对面向对象(OOP)编程的支持也很出色,使用F#语言,开发人员可以自由选择函数式编程或面向对象编程来实现他们的项目.此外,F#还可以与.NET平台上C#.VB等其他编程语言紧密结合. CPU多核心化和云计算的背景下,函数式编程可以很好的解决多并发运算的问题(在处理并发问题方面,面向对象编程存在一定程度的固有缺陷,比如类和实例化过程中产生的一些副作用,详细请参考51C

逻辑STANDBY写入功能使用案例

案例:为减轻核心数据库的负担,我们采用了逻辑STANDBY技术分离物理读对核心数据库的影响.但某报表应用方提出报表中采用了大量的中间表,通常是把基础数据运算后存入中间表,然后报表读中间表进行展现.要彻底解决该问题显然最好的办法是计算过程前推,即在应用插入基础数据的时候主动往报表所需要的数据插入运算数据,或者至少是接近报表的数据,否则即使后期采用中间表等来解决,也无法解决临时的运算带来的极大的IO开销.但应用方迫于人力和时间所限显然不敢短期内做彻底的优化,那么最后只有DBA开刀,对逻辑STANDB