自己写的flex计算器,菜鸟一个,代码写的很烂,各位多多包涵
来源:互联网 发布:大数据分析书籍 编辑:程序博客网 时间:2024/05/17 03:50
自己写的flex计算器,支持+,-,*,/ 和(),支持10以上的运算,但是不支持小数。
借鉴了http://www.cnblogs.com/mygmh/archive/2012/10/06/2713362.html 和 http://blog.csdn.net/antineutrino/article/details/6763722这个两位博主的文章。
第一次写博客,不对的地方请各位指教。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600"><mx:Script>
<![CDATA[
import mx.controls.Alert;
var operate:String=""; //运算符
var str:Array=new Array();
var ann:Number=0;
var arrynumber:Array=new Array(); //存放操作数的数组
var arryoperate:Array=new Array(); //存放运算符的数组
var num1:String;
var num2:String;
private function cResult():Number //运算函数
{
var result:Number=0;
switch(operate){
case "/":
if(Number(num2)!=0)
{result=Number(num1)/Number(num2);}
else
{
Alert.show("除数不能为0!","警告",Alert.OK);
result=0;
}
break;
case "*":
result=Number(num1)*Number(num2);
break;
case "+":
result=Number(num1)+Number(num2);
break;
case "-":
result=Number(num1)-Number(num2);
break;
default:break;
}
return result;
}
public function Isoperate(c:String):Boolean //运算符判断函数
{
switch(c)
{
case "+":
return true;
case "-":
return true;
case "*":
return true;
case "/":
return true;
default:break;
}
return false;
}
public function Precedence(op1:String,op2:String):Number //优先级比较函数
{
if(op1=="(")
{
return -1;
}
if(op1=="+"||op1=="-")
{
if(op2=="*"||op2=="/")
{
return -1;
}
else
{
return 0;
}
}
if(op1=="*"||op1=="/")
{
if(op2=="+"||op2=="-")
{
return 1;
}
else
{
return 0;
}
}
return -1;
}
public function nFix2PostFix():void //中缀运算式转化成后缀运输式
{
var str:String;
var s:String;
var i:Number=0; //表达式长度
var j:Number=0;//操作符计数器
var k:Number=0;//运算数计数器
var length:Number;
var operat:Number=0;//运算符监视器
s=txt1.text
length=txt1.length;
for(i=0;i<length;i++)
{
str=s.charAt(i);
if(str=="(")
{
arryoperate[j]=str;
j++;
operat=1;
}
else if(str==")")
{
j=j-1;
while(arryoperate[j]!="(")
{
arrynumber[k]=arryoperate[j];
k++;
j--;
}
operat=1;
}
else
{
if(!Isoperate(str))
{
if(operat==0&&k-1>=0)
{
arrynumber[k-1]=String(Number(arrynumber[k-1])*10+Number(str));
operat=0;
}
else{
arrynumber[k]=str;
k++;
operat=0;
}
}
else
{
while(arryoperate[0]!=""&&Precedence(arryoperate[j-1],str)>=0)
{
arrynumber[k]=arryoperate[j-1];
k++;
j--;
}
arryoperate[j]=str;
j++;
operat=1;
}
}
}
j=j-1;
while(j>=0)
{
arrynumber[k]=arryoperate[j];
k++;
j--;
}
arrynumber[k]=0;
ann=k;
var stro:String="";
var z:Number;
for(z=0;z<ann;z++)
{
stro+=arrynumber[z];
}
txt2.text=stro;
}
private function txt3Btn_click():void //后缀运算
{
var i:Number;
var k:Number=0;
var s:String;
var a:Array=new Array();
for(i=0;i<ann;i++)
{
s=arrynumber[i];
if(Isoperate(s)==false)
{ a[k]=arrynumber[i];k++; }
else
{
num1=a[k-2];
num2=a[k-1];
operate=arrynumber[i];
a[k-2]=cResult();
k=k-1;
}
}
txt3.text=a[0];
}
]]>
</mx:Script>
<mx:Panel x="230" y="88" width="421" height="284" layout="absolute">
<mx:TextInput x="120.5" y="19" id="txt1" />
<mx:TextInput x="120.5" y="74" id="txt2"/>
<mx:Button x="154" y="212" label="按钮" click="nFix2PostFix()"/>
<mx:Label x="28" y="76" text="num1"/>
<mx:TextInput x="120" y="126" id="txt3"/>
<mx:TextInput x="120" y="182" id="txt4"/>
<mx:Label x="28" y="130" text="operate"/>
<mx:Label x="28" y="196" text="num2"/>
<mx:Button x="220" y="212" label="计算" click="txt3Btn_click()"/>
</mx:Panel>
</mx:Application>
0 0
- 自己写的flex计算器,菜鸟一个,代码写的很烂,各位多多包涵
- FLEX上传,自己写的一个,请大家多多指点下
- 用Flex写的一个简单计算器
- 用Flex写的一个简单计算器
- 自己写的计算器
- 自己写的计算器
- 我是一个新手,各位多多包涵啦
- 一个自己写的网页计算器
- 一个计算器c++习题,初学多多包涵
- 第一次写博客,请大家多多包涵...
- 自己写的简单计算器
- 自己写了一个小的计算器···
- 一个菜鸟写的入门级for循环函数 请多多指教
- 一个比较好的Java写的计算器代码
- C#代码写的一个计算器的小程序
- 自己写的代码
- 用Javasrcipt写一个计算器的小程序[代码]
- 用java写一个简单的计算器详解代码
- Error Code: 1414. OUT or INOUT argument 2 for routine company.new_procedure is not a variable or NEW
- 徐州回收名表
- Java中static关键字与final关键字的用法与区别
- Java装饰者模式
- 字符串截断输出
- 自己写的flex计算器,菜鸟一个,代码写的很烂,各位多多包涵
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- Android中的“再按一次返回键退出程序”de实现
- Blocks学习笔记总结
- web开发----jsp中通用模版的动态引用其它页面
- CButton控件(复选框、按钮消隐)常用操作
- 通过Pojo对象 field 属性加注解实现格式校验,极大的减少代码量
- CSS中float的使用说明
- 利用magent搭建memcached集群