欢迎来到天天文库
浏览记录
ID:59254696
大小:12.63 KB
页数:6页
时间:2020-09-08
《JAVA写计算器小程序.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、/*本程序是一个计算器只能进行四则运算,当然也可以加上括号.由于时间有限没有图形界面。*但经过多次调试bug已经降为最少,如有bug纯属正常毕竟本人能力有限。*例如输入(5.2+6*2)/3*@anotherroysatm*本程序用到了中缀转后缀算法,及后缀计算。用栈和集合共同完成。*完成日期2015年5月11日共耗时两周时间。*本程序纯属原创,不得以任何方式作为商业用途,后果自负。*/packagetext;importjava.util.*;importjava.io.*;publicclassSamplenessSta
2、ck{ArrayListlist=newArrayList();//创建动态数组list,用于存放输入的表达式及后面计算部分结果存放ArrayListrearlist=newArrayList();//创建动态数组rearlist,用于缓存括号内的计算结果Stackstack1=newStack();//创建栈stack1Stackstack2=newStack();//创建栈stack2/*创建内部类,没什么用(主要作者刚学完内部类,想学以致用),根据自己喜好,可以删除*/publicclassTestStack{priv
3、ateinti=0,j=0,t=0,flag=0,flag_m=0;//创建一些变量后面需要使用privatedoublesum=0,f=0;publicintopratorPrior(charc)//判断运算符优先级{switch(c){case'(':return1;case')':return1;case'*':return2;case'/':return2;case'+':return3;case'-':return3;default:return-1;}}publicvoidstack()throwsIOExcep
4、tion{Scannercin=newScanner(newBufferedInputStream(System.in));//扫描输入的表达式System.out.println("输入表达式:");Strings=cin.nextLine();/*把输入的表达式从String类型中的数字转换成double*/while(i='0'&&s.charAt(i)<='9'
5、
6、s.charAt(i)=='.')//判断是否为数字和小数点{if(s.charAt(i)!='.
7、')sum=(s.charAt(i)-'0')+sum*10;//先全部转换成整数elsej=i;//标记小数点位置,方便后面统计数值(没有使用hashcode)t=0;f++;}if((s.charAt(i)<'0'
8、
9、s.charAt(i)>'9')&&s.charAt(i)!='.'
10、
11、s.length()-1==i){//判断四则运算符,和括号t++;if(t==1){if(s.length()-1==i)//这条if语句颇有意思,判断最后一个字符是不是‘)’{//如果不判断则可能导致自己输入的数经过String转换
12、double存到list数组中顺序有变化。if(j!=0)//你输入的是(6+6)/9.2存到list数组可能变成(6+)6/9.2,可能还会产生别的变化。sum=sum/Math.pow(10,i-j);//转换成我们输入的数list.add(sum);//放入动态数组if(s.charAt(i)==')')//放入动态数组list.add(s.charAt(i));}else{if(j!=0)sum=sum/Math.pow(10,i-j-1);if(f!=0)list.add(sum);list.add(s.charA
13、t(i));}}else{list.add(s.charAt(i));}j=0;sum=0;}i++;}/*在输入的表达式前面加上一对()方便后面计算使用*/list.add(')');list.add(0,'(');/*这个for语句很重要,有了这条for语句才能自由的使用负号例如-5*5-3或6+(-9),本程序负号和减号为同一符号*//*这个for语句的这几条if语句对应了所有由‘-’引起的bug。*/for(intd=0;d14、ist.get(d-1).equals('(')&&list.get(d+1).equals('(')){for(intr=0;r
14、ist.get(d-1).equals('(')&&list.get(d+1).equals('(')){for(intr=0;r
此文档下载收益归作者所有