zoukankan      html  css  js  c++  java
  • 小学四则运算(安卓应用)

    合作伙伴:孟西鑫    博客地址:http://www.cnblogs.com/wanzitou/

    本次实验我们把这个四则运算制作成了一个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;
        }
    }
    

     测试结果:

  • 相关阅读:
    【摘录】使用实体框架、Dapper和Chain的仓储模式实现策略
    关于微软HttpClient使用,避免踩坑
    在网上摘录一段对于IOC的解析,比较直观,大家观摩观摩
    经历招聘中面试求职的点滴
    在面试中忽然发现DateTime的一些...
    GCC的内存边界对齐
    如何删除Weblogic域
    电蚊拍选购参考
    Localizing WPF with .resx files
    C#操作串口总结
  • 原文地址:https://www.cnblogs.com/gaara-zhang/p/5360523.html
Copyright © 2011-2022 走看看