小学四则运算(安卓应用)
合作伙伴:张江鹏 博客地址:http://home.cnblogs.com/u/gaara-zhang/
本次实验我们把这个四则运算制作成了一个APP,我个人添加了一些功能,当然也借鉴了一些好的算法,本次程序我写了两个页面,第一个页面是要使用者开始的功能,然后跳转到第二个页面,第二个页面则是本次程序功能之精要,所以我在layout文件夹下建了两个布局文件,并且在src文件夹下建了两个activity.java文件分别与之相关联。
第一个布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" tools:context=".FActivity" > <Button android:id="@+id/button1" android:background="@drawable/orange_btn_selector" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/buttonname_1" /> </LinearLayout>
第一个activity文件:
package com.mxx.chuti; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class FActivity extends Activity{ private Button bt1; private Button bt2; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.factivity); bt1=(Button) findViewById(R.id.button1); //注册点击事件 bt1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub //初始化intent //第一个参数:全局变量 第二个参数:第二个页面的class文件 Intent intent=new Intent(FActivity.this, SActivity.class); startActivity(intent); } }); } }
第二个布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="TextView" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="false" android:id="@+id/et_showview" android:gravity="bottom|right" android:textSize="20sp" /> <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="30dp" android:text="TextView" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal" > <Button android:layout_width="60dp" android:layout_height="60dp" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:textSize="20sp" android:id="@+id/btn_7" android:text="@string/btn_7" /> <Button android:layout_width="60dp" android:layout_height="60dp" android:layout_marginLeft="10dip" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:textSize="20sp" android:id="@+id/btn_8" android:text="@string/btn_8" /> <Button android:layout_width="60dp" android:layout_height="60dp" android:layout_marginLeft="10dip" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:textSize="20sp" android:id="@+id/btn_9" android:text="@string/btn_9" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:gravity="center_horizontal" android:orientation="horizontal" > <Button android:layout_width="60dp" android:layout_height="60dp" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:textSize="20sp" android:id="@+id/btn_4" android:text="@string/btn_4" /> <Button android:layout_width="60dp" android:layout_height="60dp" android:layout_marginLeft="10dip" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:textSize="20sp" android:id="@+id/btn_5" android:text="@string/btn_5" /> <Button android:layout_width="60dp" android:layout_height="60dp" android:layout_marginLeft="10dip" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:textSize="20sp" android:id="@+id/btn_6" android:text="@string/btn_6" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:gravity="center_horizontal" android:orientation="horizontal" > <Button android:layout_width="60dp" android:layout_height="60dp" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:textSize="20sp" android:id="@+id/btn_1" android:text="@string/btn_1" /> <Button android:layout_width="60dp" android:layout_height="60dp" android:layout_marginLeft="10dip" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:textSize="20sp" android:id="@+id/btn_2" android:text="@string/btn_2" /> <Button android:layout_width="60dp" android:layout_height="60dp" android:layout_marginLeft="10dip" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:textSize="20sp" android:id="@+id/btn_3" android:text="@string/btn_3" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:gravity="center_horizontal" android:orientation="horizontal" > <Button android:layout_width="60dp" android:layout_height="60dp" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:textSize="20sp" android:id="@+id/btn_0" android:text="@string/btn_0" /> <Button android:layout_width="60dp" android:layout_height="60dp" android:layout_marginLeft="10dip" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="@string/btn_point" android:id="@+id/btn_point" android:textSize="20sp"/> <Button android:layout_width="60dp" android:layout_height="60dp" android:layout_marginLeft="10dip" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:textSize="20sp" android:id="@+id/btn_del" android:text="DEL" /> </LinearLayout> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="下一道题" /> <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="显示正确答案" /> <Button android:id="@+id/button3" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="确认" /> </LinearLayout> </LinearLayout>
在第二个布局文件中,我用了类似于计算器输入数字的方法进行结果的输入,按下每个数字按钮每一个数字都会在edittext控件中显示出来,并加入del按钮,防止输入错误,本来想再加一个清除按钮,只是这样一来界面不够美观,所以忍痛丢失,edittext控件上下分别是两个textview控件用来显示题目和提示。
第二个activity文件:
package com.mxx.chuti; import java.math.BigDecimal; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; @SuppressWarnings("unused") public class SActivity extends Activity implements OnClickListener{ TextView tv1; TextView tv2; EditText et_showview; Button bt_next; Button bt_rightanwser; Button bt_ok; Button btn_1; Button btn_2; Button btn_3; Button btn_4; Button btn_5; Button btn_6; Button btn_7; Button btn_8; Button btn_9; Button btn_0; Button btn_point; Button btn_del; public int min=1; public int max=100; public int num_z=0; public int num_w=0; public boolean flag=false; public int num_right=0; public int num_wrong=0; private int top; public float answer; private int size=100; private String s[]=new String[100]; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.sactivity); tv1=(TextView) findViewById(R.id.textView1); tv2=(TextView) findViewById(R.id.textView2); et_showview=(EditText) findViewById(R.id.et_showview); bt_next=(Button) findViewById(R.id.button1); bt_rightanwser=(Button) findViewById(R.id.button2); bt_ok=(Button) findViewById(R.id.button3); btn_0=(Button) findViewById(R.id.btn_0); btn_1=(Button) findViewById(R.id.btn_1); btn_2=(Button) findViewById(R.id.btn_2); btn_3=(Button) findViewById(R.id.btn_3); btn_4=(Button) findViewById(R.id.btn_4); btn_5=(Button) findViewById(R.id.btn_5); btn_6=(Button) findViewById(R.id.btn_6); btn_7=(Button) findViewById(R.id.btn_7); btn_8=(Button) findViewById(R.id.btn_8); btn_9=(Button) findViewById(R.id.btn_9); btn_point=(Button) findViewById(R.id.btn_point); btn_del=(Button) findViewById(R.id.btn_del); //给各个按钮配置监听器 bt_next.setOnClickListener((OnClickListener) this); bt_rightanwser.setOnClickListener(this); bt_ok.setOnClickListener(this); btn_0.setOnClickListener(this); btn_1.setOnClickListener(this); btn_2.setOnClickListener(this); btn_3.setOnClickListener(this); btn_4.setOnClickListener(this); btn_5.setOnClickListener(this); btn_6.setOnClickListener(this); btn_7.setOnClickListener(this); btn_8.setOnClickListener(this); btn_9.setOnClickListener(this); btn_point.setOnClickListener(this); btn_del.setOnClickListener(this); } //用外部类的方法注册点击事件 @Override public void onClick(View arg0) { // TODO Auto-generated method stub String str = et_showview.getEditableText().toString(); switch (arg0.getId()){ case R.id.btn_point: case R.id.btn_0: case R.id.btn_1: case R.id.btn_2: case R.id.btn_3: case R.id.btn_4: case R.id.btn_5: case R.id.btn_6: case R.id.btn_7: case R.id.btn_8: case R.id.btn_9: et_showview.setText(str + ((Button) arg0).getText()); break; case R.id.btn_del: if (str != null && !str.equals("")) { et_showview.setText(str.substring(0, str.length() - 1)); } break; case R.id.button1: //et_showview.setText(""); chuti(); tv2.setText(" "); case R.id.button2: tv2.setText("正确答案是"+answer); case R.id.button3: if(str.length()==0){ tv2.setText("请输入答案!"); } else{ panduan(); } default: break; } } //产生随机数 @SuppressWarnings("unused") private int suijishu(int min,int max ){ int x=(int)(min*Math.random()+max); return x; } @SuppressWarnings("unused") private void inttochar(int num,char numtochar[]){//整型转换为char型 int i=0; int mid_num; char mid_ch; do{ mid_num=num%10; numtochar[i]=(char) (mid_num+'0'); num=num/10; i++; }while(num!=0); for(int j=0;j<i/2;j++){ mid_ch=numtochar[j]; numtochar[j]=numtochar[i-1-j]; numtochar[i-1-j]=mid_ch; } } @SuppressWarnings("unused") private int length(int num){//计算数的长度 int i=0; do{ num=num/10; i++; }while(num!=0); return i; } @SuppressWarnings("unused") private int length_char(char fenshu[]){//计算分数长度 int i=0; do{ i++; }while(fenshu[i]!=')'); i++; return i; } @SuppressWarnings("unused") private int length_str(char str[]){//计算完整表达式长度 int i=0; do{ i++; }while(str[i]!='\0'); //i++; return i; } @SuppressWarnings("unused") private void clear_char(char mid_cha[]){//初始化字符数组 for(int i=0;i<10;i++){ mid_cha=null; } } @SuppressWarnings("unused") private int fen_huajian(int num_first,int num_second){//求分子分母的最大公约数 int num_yuf; int num_yus; int num_yumid = 1; for(int i=2;i<=num_first;i++){ num_yuf=num_first%i; num_yus=num_second%i; if(num_yuf==0&&num_yus==0){ num_yumid=i; } } return num_yumid; } private void fen(char fe[]){//产生分数 char num1[]=new char[10];//保存分子 char num2[]=new char[10];//保存分母 int num_first; int num_second; int l1; int l2; int i; int num_maxyue; num_first=suijishu(min,max); num_second=suijishu(num_first,max); num_maxyue=fen_huajian(num_first,num_second); num_first=num_first/num_maxyue;//分子分母化简 num_second=num_second/num_maxyue; l1=length(num_first); l2=length(num_second); inttochar(num_first,num1); inttochar(num_second,num2); fe[0]='('; for(i=0;i<l1;i++){ fe[i+1]=num1[i]; } fe[l1+1]='/'; for(int j=0;j<l2;j++){ fe[l1+2+j]=num2[j]; } fe[l1+l2+2]=')'; } private void chuti(){ int num_yunsuanfu;//运算符个数 int ch_intorfen;//选择整数或分数 int number;//保存整数 int len=0;//保存整个式子长度 int mid_len=0;//保存单个数长度 char yunsuanfu[]=new char[3];//保存运算符 int yunsuan;//产生随机数1-4,用以判断运算符 //计数(运算数个数) char mid_num[]=new char[10];//保存中间产生的数 char num[]=new char[100];//保存完整式子 num_yunsuanfu=suijishu(1,3);//判断产生的运算符为几个 switch(num_yunsuanfu){ case 1://产生一个运算符的情况 int i1=0; yunsuan=suijishu(1,4); switch(yunsuan){ case 1: yunsuanfu[0]='+'; break; case 2: yunsuanfu[0]='-'; break; case 3: yunsuanfu[0]='*'; break; case 4: yunsuanfu[0]='/'; break; } do{ ch_intorfen=suijishu(1,2); switch(ch_intorfen){ case 1: do{ number=suijishu(min,max); }while(i1==1&&yunsuanfu[0]=='/'&&number==0); inttochar(number,mid_num); mid_len=length(number); for(int l=0;l<mid_len;l++){ num[l+len]=mid_num[l]; } break; case 2: fen(mid_num); mid_len=length_char(mid_num); for(int l=0;l<mid_len;l++){ num[l+len]=mid_num[l]; } clear_char(mid_num); break; } len+=mid_len; if(i1<1){ num[len]=yunsuanfu[0]; } i1++; len++; }while(i1!=2); len=0; break; case 2://产生两个运算符的情况 int k2; int i2=0; for(k2=0;k2<2;k2++){ yunsuan=suijishu(1,4); switch(yunsuan){ case 1: yunsuanfu[k2]='+'; break; case 2: yunsuanfu[k2]='-'; break; case 3: yunsuanfu[k2]='*'; break; case 4: yunsuanfu[k2]='/'; break; } } do{ ch_intorfen=suijishu(1,2); switch(ch_intorfen){ case 1: do{ number=suijishu(min,max); }while(i2!=0&&yunsuanfu[i2-1]=='/'&&number==0); inttochar(number,mid_num); mid_len=length(number); for(int l=0;l<mid_len;l++){ num[l+len]=mid_num[l]; } break; case 2: fen(mid_num); mid_len=length_char(mid_num); for(int l=0;l<mid_len;l++){ num[l+len]=mid_num[l]; } clear_char(mid_num); break; } len+=mid_len; if(i2<3){ num[len]=yunsuanfu[i2]; } i2++; len++; }while(i2!=3); len=0; break; case 3: int k3; int i3=0; for(k3=0;k3<3;k3++){ yunsuan=suijishu(1,4); switch(yunsuan){ case 1: yunsuanfu[k3]='+'; break; case 2: yunsuanfu[k3]='-'; break; case 3: yunsuanfu[k3]='*'; break; case 4: yunsuanfu[k3]='/'; break; } } do{ ch_intorfen=suijishu(1,2); switch(ch_intorfen){ case 1: do{ number=suijishu(min,max); }while(i3!=0&&yunsuanfu[i3-1]=='/'&&number==0); inttochar(number,mid_num); mid_len=length(number); for(int l=0;l<mid_len;l++){ num[l+len]=mid_num[l]; } break; case 2: fen(mid_num); mid_len=length_char(mid_num); for(int l=0;l<mid_len;l++){ num[l+len]=mid_num[l]; } clear_char(mid_num); break; } len+=mid_len; if(i3<3){ num[len]=yunsuanfu[i3]; } i3++; len++; }while(i3!=4); len=0; break; } kuohao(num,num_yunsuanfu); } private void kuohao(char num[],int b){ int wz1=0;//记录第一个运算符的位置 int wz2=0;//记录第二个运算符的位置 int wz3=0;//记录第三个运算符的位置 int i=0;//数组下标 int kh_wz;//括号位置种类 int len_str = 0;//表达式长度 char num2[]=new char[100]; String Sstr; if(b==1){ len_str=length_str(num); for(i=0;i<len_str;i++){ num2[i]=num[i]; } num2[len_str]='='; } else{ switch(b){ case 2: len_str=length_str(num); for(;;){ if(num[i]=='('){ for(;;){ if(num[i]==')'){ break; } i++; } wz1=i+1; break; } else{ if(num[i]=='+'||num[i]=='-'||num[i]=='*'||num[i]=='/'){ wz1=i; break; } i++; } } for(i=wz1+1;;){ if(num[i]=='('){ for(;;){ if(num[i]==')'){ break; } i++; } wz2=i+1; break; } else{ if(num[i]=='+'||num[i]=='-'||num[i]=='*'||num[i]=='/'){ wz2=i; break; } i++; } } kh_wz=suijishu(0,3); switch(kh_wz){ case 1: num2[0]='('; for(i=0;i<wz2;i++){ num2[i+1]=num[i]; } num2[wz2+1]=')'; for(i=wz2;i<len_str;i++){ num2[i+2]=num[i]; } num2[len_str+2]='='; break; case 2: for(i=0;i<wz1+1;i++){ num2[i]=num[i]; } num2[wz1+1]='('; for(i=wz1+1;i<len_str;i++){ num2[i+1]=num[i]; } num2[len_str+1]=')'; num2[len_str+2]='='; break; default: for(i=0;i<len_str;i++){ num2[i]=num[i]; } num2[len_str]='='; break; } break; case 3: len_str=length_str(num); for(;;){ if(num[i]=='('){ for(;;){ if(num[i]==')'){ break; } i++; } wz1=i+1; break; } else{ if(num[i]=='+'||num[i]=='-'||num[i]=='*'||num[i]=='/'){ wz1=i; break; } i++; } } for(i=wz1+1;;){ if(num[i]=='('){ for(;;){ if(num[i]==')'){ break; } i++; } wz2=i+1; break; } else{ if(num[i]=='+'||num[i]=='-'||num[i]=='*'||num[i]=='/'){ wz2=i; break; } i++; } } for(i=wz2+1;;){ if(num[i]=='('){ for(;;){ if(num[i]==')'){ break; } i++; } wz3=i+1; break; } else{ if(num[i]=='+'||num[i]=='-'||num[i]=='*'||num[i]=='/'){ wz3=i; break; } i++; } } kh_wz=suijishu(0,9); switch(kh_wz){ case 1: num2[0]='('; for(i=0;i<wz2;i++){ num2[i+1]=num[i]; } num2[wz2+1]=')'; for(i=wz2;i<len_str;i++){ num2[i+2]=num[i]; } num2[len_str+2]='='; break; case 2: for(i=0;i<wz1+1;i++){ num2[i]=num[i]; } num2[wz1+1]='('; for(i=wz1+1;i<wz3;i++){ num2[i+1]=num[i]; } num2[wz3+1]=')'; for(i=wz3;i<len_str;i++){ num2[i+2]=num[i]; } num2[len_str+2]='='; break; case 3: for(i=0;i<wz2+1;i++){ num2[i]=num[i]; } num2[wz2+1]='('; for(i=wz2+1;i<len_str;i++){ num2[i+1]=num[i]; } num2[len_str+1]=')'; num2[len_str+2]='='; break; case 4: num2[0]='('; num2[1]='('; for(i=0;i<wz2;i++){ num2[i+2]=num[i]; } num2[wz2+2]=')'; for(i=wz2;i<wz3;i++){ num2[i+3]=num[i]; } num2[wz3+3]=')'; for(i=wz3;i<len_str;i++){ num2[i+4]=num[i]; } num2[len_str+4]='='; break; case 5: num2[0]='('; for(i=0;i<wz1+1;i++){ num2[i+1]=num[i]; } num2[wz1+2]='('; for(i=wz1+1;i<wz3;i++){ num2[i+2]=num[i]; } num2[wz3+2]=')'; num2[wz3+3]=')'; for(i=wz3;i<len_str;i++){ num2[i+4]=num[i]; } num2[len_str+4]='='; break; case 6: for(i=0;i<wz1+1;i++){ num2[i]=num[i]; } num2[wz1+1]='('; num2[wz1+2]='('; for(i=wz1+1;i<wz3;i++){ num2[i+2]=num[i]; } num2[wz3+2]=')'; for(i=wz3;i<len_str;i++){ num2[i+3]=num[i]; } num2[len_str+3]=')'; num2[len_str+4]='='; break; case 7: for(i=0;i<wz1+1;i++){ num2[i]=num[i]; } num2[wz1+1]='('; for(i=wz1+1;i<wz2+1;i++){ num2[i+1]=num[i]; } num2[wz2+2]='('; for(i=wz2+1;i<len_str;i++){ num2[i+2]=num[i]; } num2[len_str+2]=')'; num2[len_str+3]=')'; num2[len_str+4]='='; break; case 8: num2[0]='('; for(i=0;i<wz2;i++){ num2[i+1]=num[i]; } num2[wz2+1]=')'; num2[wz2+2]=num[wz2]; num2[wz2+3]='('; for(i=wz2+1;i<len_str;i++){ num2[i+3]=num[i]; } num2[len_str+3]=')'; num2[len_str+4]='='; break; default: for(i=0;i<len_str;i++){ num2[i]=num[i]; } num2[len_str]='='; break; } break; } } //System.out.println(num2); Sstr=String.valueOf(num2); char2str(num2,Sstr); } private void char2str(char str[],String Sstr){ int l; int k=0; char ww; String str1[]=new String[100]; String post[]=new String[100]; l=length_str(str); for(int i=0;i<l;i++){ ww=str[i]; switch (ww){ case '=': str1[k]="="; k++; break; case '(': str1[k]="("; k++; break; case '+': str1[k]="+"; k++; break; case '-': str1[k]="-"; k++; break; case '*': str1[k]="*"; k++; break; case '/': str1[k]="/"; k++; break; case ')': str1[k]=")"; k++; break; default: int ss=i; if (str[ss]=='0'){ str1[k]="0"; } if (str[ss]=='1'){ str1[k]="1"; } if (str[ss]=='2'){ str1[k]="2"; } if (str[ss]=='3'){ str1[k]="3"; } if (str[ss]=='4'){ str1[k]="4"; } else if (str[ss]=='5'){ str1[k]="5"; } if (str[ss]=='6'){ str1[k]="6"; } if (str[ss]=='7'){ str1[k]="7"; } if (str[ss]=='8'){ str1[k]="8"; } if (str[ss]=='9'){ str1[k]="9"; } for (ss=ss+1;;ss++){ if (str[ss]=='0'){ str1[k]+="0"; } else if (str[ss]=='1'){ str1[k]+="1"; } else if (str[ss]=='2'){ str1[k]+="2"; } else if (str[ss]=='3'){ str1[k]+="3"; } else if (str[ss]=='4'){ str1[k]+="4"; } else if (str[ss]=='5'){ str1[k]+="5"; } else if (str[ss]=='6'){ str1[k]+="6"; } else if (str[ss]=='7'){ str1[k]+="7"; } else if (str[ss]=='8'){ str1[k]+="8"; } else if (str[ss]=='9'){ str1[k]+="9"; } else{ i=ss-1; break; } } k++; } } mid_post(str1,post,Sstr); } private void clearstack(){//初始化栈顶指针 top=-1; } private int emptystack(){ if (top<0){ return 1; } else{ return 0; } } private String gettop(){ if (emptystack()==1){ return null; } else{ return s[top]; } } private void Push(String mid_v){ if (top>=size-1){ } else{ top++; s[top]=mid_v; } } private String pop(){ if (emptystack()==1){ return null; } else{ top--; return s[top+1]; } } private int precede(String x,String y){ int x1=0; int y1=0; if (x=="#") { x1=0; } if (x=="(") { x1=1; } if (x=="+") { x1=2; } if (x=="-") { x1=2; } if (x=="*") { x1=3; } if (x=="/") { x1=3; } if (y=="#") { y1=0; } if (y=="+") { y1=2; } if (y=="-") { y1=2; } if (y=="*") { y1=3; } if (y=="/") { y1=3; } if (y=="(") { y1=4; } if(x1>=y1){ return 1; } else{ return 0; } } private void mid_post(String str[],String post[],String Sstr){ int i=0; int j=0; String x; clearstack(); Push("="); do{ x=str[i]; i++; if (x=="="){ while (emptystack()==0){ post[j++]=pop(); } } else if (x==")"){ while (gettop()!="("){ post[j++]=pop(); } pop(); } else if (x=="+"||x=="-"||x=="*"||x=="/"||x=="("){ while (precede(gettop(),x)==1){ post[j++]=pop(); } Push(x); } else{ post[j++]=x; } } while (x!="="); postcount(post,Sstr); } private void postcount(String post[],String Sstr){ int i=0; float z,a,b=0; String x; String xx; clearstack(); while(post[i]!="="){ x=post[i]; if(x=="+"){ b=Float.valueOf(pop()); a=Float.valueOf(pop()); z=a+b; xx=String.valueOf(z); Push(xx); } else if(x=="-"){ b=Float.valueOf(pop()); a=Float.valueOf(pop()); z=a-b; xx=String.valueOf(z); Push(xx); } else if(x=="*"){ b=Float.valueOf(pop()); a=Float.valueOf(pop()); z=a*b; xx=String.valueOf(z); Push(xx); } else if(x=="/"){ b=Float.valueOf(pop()); a=Float.valueOf(pop()); z=a/b; xx=String.valueOf(z); Push(xx); } else{ Push(x); } i++; } if(emptystack()==0){ x=gettop(); answer=Float.parseFloat(x); BigDecimal c=new BigDecimal((float)answer); answer = c.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue(); } if(answer<0){ chuti(); } else{ num_z++; flag=true; tv1.setText(Sstr); } } private void panduan(){ String an; float b; an=et_showview.getText().toString(); b=Float.parseFloat(an); if(b==answer){ if(flag){ num_right++; } tv2.setText("回答正确!"); } else { if(flag){ num_wrong++; } if(flag){ tv2.setText("回答错误!正确答案为:"+answer); } } flag=false; } }
测试结果: