5

小学四则运算(安卓应用)_51CTO博客_小学数学 四则运算

 8 months ago
source link: https://blog.51cto.com/u_16503920/9200643
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

精选 原创

合作伙伴:孟西鑫  

本次实验我们把这个四则运算制作成了一个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;
    }
}
  • 1000.
  • 1001.
  • 1002.
  • 1003.
  • 1004.
  • 1005.
  • 1006.
  • 1007.
  • 1008.
  • 1009.
  • 1010.
  • 1011.
  • 1012.
  • 1013.
  • 1014.
  • 1015.
  • 1016.
  • 1017.
  • 1018.
  • 1019.
  • 1020.
  • 1021.
  • 1022.
  • 1023.
  • 1024.
  • 1025.
  • 1026.
  • 1027.
  • 1028.
  • 1029.
  • 1030.
  • 1031.
  • 1032.
  • 1033.
  • 1034.
  • 1035.
  • 1036.
  • 1037.
  • 1038.
  • 1039.
  • 1040.
  • 1041.

 测试结果:

小学四则运算(安卓应用)_布局文件
小学四则运算(安卓应用)_布局文件_02
小学四则运算(安卓应用)_布局文件_03
小学四则运算(安卓应用)_布局文件_04
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK