你的位置:首页 > 软件开发 > 操作系统 > 安卓简易编辑器

安卓简易编辑器

发布时间:2015-09-13 23:00:04
自己做了个简易的小计算器,目前仅实现加减乘除操作,后续还未完善,只是简单记录一下自己的学习历程 计算器制作布局很简单,只是运用的算法清晰即可制作,我是运用了中缀表达式转化成后缀表达式,然后来的出计算器的算法。首先是(1)若为数字直接输出,并且储存在pre_out数组中,(2) ...

自己做了个简易的小计算器,目前仅实现加减乘除操作,后续还未完善,只是简单记录一下自己的学习历程

 

计算器制作布局很简单,只是运用的算法清晰即可制作,我是运用了中缀表达式转化成后缀表达式,然后来的出计算器的算法。

首先是

(1)若为数字直接输出,并且储存在pre_out数组中,

(2)遇到运算符,若栈为空,则进栈,不然先弹出优先级较高的运算符到pre_out,再将运算符弹入栈中

(3)当读取完字符串,就将栈里面的元素都弹出,此时pre_out就是一个后缀表达式

(4)然后对pre_out进行操作,当遇到操作数,则直接加入栈中,当遇到运算符,则从栈中弹出两个元素进行运算,但是要注意元素的先后顺序和运算符的种类,即减法和除法要注意元素弹出的顺序,后弹出的应该作为被除数和被减数。

(5)在操作过程中,如果遇到运算符但是栈中只有一个元素,那么说明无法进行运算,表达式为错误表达式,我们就用Toast提示用户重新输入

(6)对的表达式最后应该栈中只有一个元素,那个就是结果取出输出即可

 1 /** 2  * author Cc_Elvis 3 */ 4 package com.hcc.my_calculate; 5  6 import java.util.LinkedList; 7 import java.util.Stack; 8  9 import android.R.integer; 10 import android.R.layout; 11 import android.app.Activity; 12 import android.os.Bundle; 13 import android.view.Menu; 14 import android.view.MenuItem; 15 import android.view.View; 16 import android.view.View.OnClickListener; 17 import android.widget.Button; 18 import android.widget.TextView; 19 import android.widget.Toast; 20  21 public class MainActivity extends Activity 22 { 23   private TextView screenView; 24   private Button zeroBtn; 25   private Button oneBtn; 26   private Button twoBtn; 27   private Button threeBtn; 28   private Button fourBtn; 29   private Button fiveBtn; 30   private Button sixBtn; 31   private Button sevenBtn; 32   private Button eightBtn; 33   private Button nineBtn; 34   private Button plusBtn; 35   private Button minusBtn; 36   private Button divideBtn; 37   private Button MultiBtn; 38   private Button equalBtn; 39   private Button resBtn; 40   private LinkedList<String> NumList=new LinkedList<String>(); 41   private String showString=""; 42   private String[] pre_out=new String[100]; 43   private int pre_out_Num=0; 44   boolean illegal_flag=true; 45   boolean isString=true; 46   @Override 47   protected void onCreate(Bundle savedInstanceState) 48   { 49     super.onCreate(savedInstanceState); 50     setContentView(R.layout.myview); 51     (oneBtn=(Button)findViewById(R.id.One)).setOnClickListener(listen); 52     (twoBtn=(Button)findViewById(R.id.Two)).setOnClickListener(listen); 53     (threeBtn=(Button)findViewById(R.id.Three)).setOnClickListener(listen); 54     (fourBtn=(Button)findViewById(R.id.Four)).setOnClickListener(listen); 55     (fiveBtn=(Button)findViewById(R.id.Five)).setOnClickListener(listen); 56     (sixBtn=(Button)findViewById(R.id.Six)).setOnClickListener(listen); 57     (sevenBtn=(Button)findViewById(R.id.Seven)).setOnClickListener(listen); 58     (eightBtn=(Button)findViewById(R.id.Eight)).setOnClickListener(listen); 59     (nineBtn=(Button)findViewById(R.id.Nine)).setOnClickListener(listen); 60     (equalBtn=(Button)findViewById(R.id.equal)).setOnClickListener(listen); 61     (divideBtn=(Button)findViewById(R.id.Division)).setOnClickListener(listen); 62     (minusBtn=(Button)findViewById(R.id.Minus)).setOnClickListener(listen); 63     (plusBtn=(Button)findViewById(R.id.plus)).setOnClickListener(listen); 64     (MultiBtn=(Button)findViewById(R.id.Multip)).setOnClickListener(listen); 65     (resBtn=(Button)findViewById(R.id.restart)).setOnClickListener(listen); 66     (zeroBtn=(Button)findViewById(R.id.Zero)).setOnClickListener(listen); 67     screenView=(TextView)findViewById(R.id.Screen); 68     Init(); 69   } 70   private OnClickListener listen=new OnClickListener() 71   { 72      73     @Override 74     public void onClick(View v) 75     { 76      Button btn=(Button)v; 77      if( btn.getText().equals("1") || btn.getText().equals("2") || 78        btn.getText().equals("3") || btn.getText().equals("4") || 79        btn.getText().equals("5") || btn.getText().equals("6") || 80        btn.getText().equals("7") || btn.getText().equals("8") || 81        btn.getText().equals("9") || btn.getText().equals("0"))//如果为数字,直接输出并储存在pre_out数组里以转化成后缀表达式 82        { 83               String c=btn.getText().toString(); 84               addString(c);//add to TextEdit 85               if(isString) 86                { 87                pre_out[pre_out_Num]+=c;//add to Stack 88                isString=true; 89                } 90               else 91                { 92                 pre_out_Num++; 93                 pre_out[pre_out_Num]=c; 94                 isString=true; 95                } 96        } 97      else if(btn.getText().equals("AC"))//reset 98       { 99         restart();100       }101      else if(btn.getText().equals("="))//遇到‘=’则对栈开始进行清空并且输出到pre_out里面102       {103        while(!NumList.isEmpty())104         {105          pre_out[++pre_out_Num]=NumList.removeFirst();106         }107        if(!GetResult())//judge if result true?108         {109          Toast.makeText(MainActivity.this, "输入不合法", Toast.LENGTH_LONG).show();110         }111        else112         {113         String restString=screenView.getText().toString();114         restart();115         screenView.setText(restString);116         }117       }118      else if (btn.getText().equals("+") || btn.getText().equals("-") ||119            btn.getText().equals("*") || btn.getText().equals("/"))120       {121        isString=false;122        String c=btn.getText().toString();123        addString(c);//输出到TextView上面124        if(NumList.isEmpty())//若栈为空则先将运算符压入125         {126          NumList.addFirst(c);127         }128        else129         {130          while(NumList.size()>=1&&get_prior(c)<=get_prior(NumList.getFirst().toString()))////先弹出优先级较高的运算符131           {132            if(pre_out_Num>0)133            pre_out[++pre_out_Num]=NumList.removeFirst();//转为后缀表达式序列134            else pre_out[pre_out_Num]=NumList.removeFirst();135           }136          NumList.addFirst(c);//再将此运算符入栈137         }138       }139     }140   };141   private void restart()//重新开始142   {143     Init();144     NumList.clear();145     pre_out_Num=0;146     screenView.setText(""+0);147     showString="";148   }149   private void addString(String c)//显示结果框的字符串150   {151     showString+=c;152      screenView.setText(showString);153   }154   private boolean GetResult()//获取结果155   {156    int length=0;157    while(pre_out[length]!="")158    {159      String c=pre_out[length];160      if(get_prior(c)==0)//数字直接压入栈161      {162        NumList.addFirst(c);163        length++;164      }165      else166      {167        compute(c);168       length++;169      }170    }171    if(NumList.size()>1||get_prior(NumList.getFirst())!=0||illegal_flag==false)172      return false;173    if(!NumList.isEmpty())174    {175    int result=Integer.parseInt(NumList.removeFirst());176    screenView.setText(""+result);177    return true;178    }179    else return false;180   }181   private int get_prior(String c)182   {183     if(c.equals("+")||c.equals("-"))184       return 1;185     else if(c.equals("*")||c.equals("/"))186       return 2;187     else return 0;188   }189   private void compute(String c)//计算每一次的结果值190   {191     int sum =0,a,b;192     if(NumList.size()>=2)//如果只剩下一个数,那么肯定不合法193     {194     a=Integer.parseInt(NumList.removeFirst());195     b=Integer.parseInt(NumList.removeFirst());196     }197     else 198     {199       illegal_flag=false;200       return ;201     } ;202     if(c.equals("+"))203     {204       sum=a+b;205     } 206     else if(c.equals("*"))207     {208       sum=a*b;209     }210     else if(c.equals("-"))211     {212       sum=b-a;213     }214     else if(c.equals("/"))215     {216       sum=b/a;217     }218     String s=""+sum;219     NumList.addFirst(s);220   }221   private void Init()//初始化表达式222   {223     for(int i=0;i<100;i++)224       pre_out[i]="";225   }226 }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:安卓简易编辑器

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录