小学四则运算(安卓应用)

合作伙伴:张江鹏    博客地址: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]!='');
        //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;
    }
}

测试结果:

原文地址:https://www.cnblogs.com/wanzitou/p/5359662.html