• 小学四则运算APP 第三阶段冲刺


    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scrollbars="vertical"
        android:paddingBottom="10dp"
        android:paddingTop="5dp"
        android:background="@drawable/b1">
    	<LinearLayout 
    	    android:layout_width="fill_parent"
    	    android:layout_height="fill_parent"
    	    android:orientation="vertical" 
    	    android:paddingLeft="8dp"
    	    android:paddingRight="8dp">
    	    <RelativeLayout 
    	        android:layout_width="fill_parent"
    	        android:layout_height="fill_parent">
    	        <EditText
    			    android:id="@+id/editText"
    			    android:layout_width="fill_parent"
    			    android:layout_height="90dp"
    			    android:autoText="true"
    			    android:hint="@string/editText_hint_text"
    			    android:minHeight="60dp"
    			    android:background="@drawable/selector"
    			    android:paddingTop="10dp"
    			    android:paddingBottom="15dp" 
    			    android:singleLine="false"
    			    android:scrollbars="vertical"/>
    	        <TextView 
    	            android:id="@+id/tv"
    	            android:layout_alignRight="@id/editText"
    	            android:layout_alignBottom="@id/editText"
    	            android:layout_width="wrap_content"
    	        	android:layout_height="wrap_content"
    	        	android:text="@string/kong"
    	        	android:textColor="#CD0000"/>
    	    </RelativeLayout>
    		<LinearLayout
    		    android:layout_width="fill_parent"
    		    android:layout_height="fill_parent"
    		    android:orientation="horizontal"
    		    android:paddingTop="10dip"
    		    android:paddingBottom="5dp" >
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="("
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/left"
    		            android:textStyle="bold"
    		            android:layout_marginRight="5dp"/>
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text=")"
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/right"
    		            android:textStyle="bold"
    		            android:layout_marginRight="5dp"
    		            />
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="Clean"
    		            android:layout_weight="1"
    		            android:background="@drawable/selector"
    		            android:id="@+id/ac"
    		            android:textStyle="bold"
    		            android:layout_marginRight="5dp"
    		           />
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="Backspace"
    		            android:layout_weight="1"
    		            android:background="@drawable/selector"
    		            android:id="@+id/bs"
    		            android:textStyle="bold"
    		           
    		           />
    		        
    		</LinearLayout>
    		<LinearLayout 
    		    android:layout_width="fill_parent"
    		    android:layout_height="wrap_content"
    		    android:orientation="horizontal"
    		    android:paddingBottom="5dp">
    		   
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="7"
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    					android:id="@+id/num7"
    					android:textStyle="bold"
    					android:layout_marginRight="5dp"/>	            
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="8"
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/num8"
    		            android:textStyle="bold"
    		            android:layout_marginRight="5dp"/>
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="9"
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/num9"
    		            android:textStyle="bold"
    		            android:layout_marginRight="5dp"/>
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="÷"
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/divide"
    		            android:textStyle="bold"
    		           />
    		</LinearLayout>
    	<LinearLayout 
    		    android:layout_width="fill_parent"
    		    android:layout_height="fill_parent"
    		    android:orientation="horizontal"
    		    android:layout_weight="1"
    		    android:paddingBottom="5dp">
    		   
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="4"
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/num4"
    		            android:textStyle="bold"
    		            android:layout_marginRight="5dp"/>
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="5"
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/num5"
    		            android:textStyle="bold"
    		            android:layout_marginRight="5dp"/>
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="6"
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/num6"
    		            android:textStyle="bold"
    		            android:layout_marginRight="5dp"/>
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="×"
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/mul"
    		            android:textStyle="bold"
    		            />
    		</LinearLayout>
    		<LinearLayout 
    		    android:layout_width="fill_parent"
    		    android:layout_height="fill_parent"
    		    android:orientation="horizontal"
    		    android:layout_weight="1"
    		    android:paddingBottom="5dp">
    		   
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="1"
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/num1"
    		            android:textStyle="bold"
    		            android:layout_marginRight="5dp"/>
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="2"
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/num2"
    		            android:textStyle="bold"
    		            android:layout_marginRight="5dp"/>
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="3"
    		            android:layout_weight="1"
    		            android:background="@drawable/selector"
    		            android:textSize="30sp"
    		            android:id="@+id/num3"
    		            android:textStyle="bold"
    		            android:layout_marginRight="5dp"/>
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="-"
    		            android:textSize="35sp"
    		            android:layout_weight="1"
    		            android:background="@drawable/selector"
    		            android:id="@+id/sub"
    		            android:textStyle="bold"
    		            />
    		</LinearLayout>
    	<LinearLayout 
    		    android:layout_width="fill_parent"
    		    android:layout_height="fill_parent"
    		    android:orientation="horizontal"
    		    android:layout_weight="1"
    		    android:paddingBottom="5dp"
    		   >
    		   
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="0"
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		        	android:background="@drawable/selector"
    		        	android:id="@+id/num0"
    		        	android:textStyle="bold"
    		        	android:layout_marginRight="5dp"/>
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="."
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/pot"
    		            android:textStyle="bold"
    		            android:layout_marginRight="5dp"/>
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="fill_parent"
    		            android:text="+"
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/add"
    		            android:textStyle="bold"
    		            android:layout_marginRight="5dp"/>
    		        <Button 
    		            android:layout_width="fill_parent"
    		            android:layout_height="wrap_content"
    		            android:text="="
    		            android:layout_weight="1"
    		            android:textSize="30sp"
    		            android:background="@drawable/selector"
    		            android:id="@+id/equ"
    		            android:textStyle="bold"
    		           />		    
    		</LinearLayout>
    		<LinearLayout 
    		    android:layout_width="fill_parent"
    		    android:layout_height="fill_parent"
    		    android:orientation="horizontal"
    		    android:layout_weight="1"
    		    android:paddingBottom="5dp">
    			<Button 
    			    android:id="@+id/minus"
    		        android:layout_width="fill_parent"
    		        android:layout_height="fill_parent"
    		        android:text="+/-"
    		        android:layout_weight="1"
    		        android:textSize="30sp"
    		        android:background="@drawable/selector"
    		        android:textStyle="bold"
    		        android:layout_marginRight="5dp"/>	
       
    	  </LinearLayout>
    	</LinearLayout>
    </ScrollView>
    

     Calculator.java

    package com.manymore13.calc;
    
    import java.math.BigDecimal;
    import java.util.EmptyStackException;
    import java.util.Stack;
    
    import android.util.Log;
    
    // 测试匹配否
    // 特殊加减乘除 + - × ÷     
    // 特殊正负 ﹢﹣
    // 普通加减乘除正负 + - * / + -
    public class Calculator {
    
        private static String expression;
        
        
        // 后缀式
        private String suffix;
    
        // 特殊左括号
        final static char LEFT_NORMAL = '﹙';
        // 特殊右括号
        final static char RIGHT_NORMAL = '﹚';
        // 特殊负号
        final static char MINUS = '﹣';
        // 特殊加号
        final static char ADD = '+';
        // 特殊乘法
        final static char MUL = '×';
        // 特殊除法
        final static char DIV = '÷';
        // 特殊减法
        final static char SUB = '-';
        // 特殊等于号
        final static char equ = '=';
        
        public static String getExpression() {
            return expression;
        }
    
        
        
        // 返回后缀
        public String getSuffix() {
            return suffix;
        }
    
        public void setExpression(String equation) {
            expression = equation;
            createSuffix();
            
        }
        
        public Calculator(String equation)
        {
            expression = equation;
            createSuffix();
        }
        
        public Calculator()
        {
            expression = "";
            suffix = "";
        }
        
        /**
         *  判断括号有没有匹配
         *  匹配方法:遇到左括号进栈,遇到右括号出栈并且比对出栈的括号
         * 
         */
        public  boolean isBalanced()
        {
                            
            Stack<Character> store = new Stack<Character>();
            store.clear();
            char c;
            for(int i=0; i<expression.length(); i++)
            {
                c = expression.charAt(i);
                switch(c)
                {
                    
                    case LEFT_NORMAL:
                    {
                        store.push(expression.charAt(i));
                        break;
                    }
                    case RIGHT_NORMAL:
                    {    
                        if(store.isEmpty() || store.pop()!= LEFT_NORMAL)
                        {
                            return false;
                        }
                        break;
                        
                    }
                                            
                }
            }
            if(store.isEmpty())
            {
                return true;
            }
            else
            {
                return false;
            }
            
        }
        
    
        private static boolean isOperator(char ope)
        {
            if(ope == ADD || ope==SUB 
                    ||ope == MUL || ope == DIV)
            {
                return true;
            }
            return false;
        }
        
        private static boolean isNum(char c)
        {
            if(c>='0' && c<='9')
            {
                return true;
            }
            return false;
        }
        // 中缀式转后缀式
        public  String createSuffix()
        {
            Stack<String> stack = new Stack<String>();
            String exp = expression.trim();
            String suf = "";
            int i = 0;
            char c;
            while(i < exp.length())
            {
                c = exp.charAt(i);
                if(c == LEFT_NORMAL) // 左括号
                {
                    stack.push(LEFT_NORMAL+"");
                }
                else if(isFit(c)) // 符合数字的一部分
                {
                    String num = "";
                    
                    while(i<exp.length() && isFit(exp.charAt(i)) )
                    {
                        
                        num+=exp.charAt(i);
                        i++;
                    }
                    suf += (num + " "); //后缀
                    i--;
                }else if(c == ADD || c == SUB || c == MUL ||c == DIV)  // 运算符
                {
                    while(true)
                    {
                        if(stack.isEmpty())
                        {
                            break;
                        }
                        if(stack.peek().equals(""+LEFT_NORMAL))
                        {
                            break;
                        }
                        if(compare(stack.peek().charAt(0),c))
                        {
                            break;
                        }
                        suf += (stack.pop()+" "); // 后缀
                    }
                    stack.push(c+""); 
                }
                else if(c == RIGHT_NORMAL)
                {
                    while(!stack.isEmpty())
                    {
                        if(stack.peek().equals(""+LEFT_NORMAL))
                        {
                            stack.pop();
                            break;
                        }
                        suf += (stack.pop() + " "); // 后缀
                    }
                    
                }
                i++;
                
            }
            while(!stack.isEmpty())
            {
                suf += (stack.pop() + " "); // 后缀
            }
            this.suffix = suf;
            return suf;
            
        }
        
        /**
         *  判断是否符合数字的一部分
         * @param digit
         * @return 符合返回true 否则返回false
         */
        private boolean isFit(char digit)
        {
            if(digit>='0' && digit<='9'||digit ==MINUS||digit=='.' )
            {
                return true;
            }
            return false;
        }
        
        // 栈中运算符与将要读取的运算符作比较
        // 返回true指示栈中运算符优先级大于将要读取运算符
        // 其他的低于或等于都返回false
        private boolean compare(char stackOpe, char nextOpe)
        {
            int v1 = value(stackOpe);
            int v2 = value(nextOpe);
            if( v1 < v2)
            {
                return true;
            }
            return false;
        }
        
        // 运算符优先级
        private int value(char ope)
        {
            if(ope==ADD || ope==SUB)
            {
                return 1;
            }    
            else if(ope==MUL || ope==DIV)
            {
                return 2;
            }
            else
            {
                return 0;
            }
        }
        
        /**
         * @param suffix 后缀式
         * @return 利用后缀式算出结果
         */
        public String getResult()
        {
            suffix = suffix.replace(MINUS, '-');
            String[] str = suffix.split(" ");
            Stack<String> valueStack = new Stack<String>();
            for(int i=0; i<str.length; i++)
            {
                // 遇到运算符出栈
                if(str[i].equals(ADD+"") || str[i].equals(SUB+"")
                    || str[i].equals(MUL+"") || str[i].equals(DIV+""))
                {
                    String rightNum;
                    String leftNum; 
                    try
                    {
                        rightNum = valueStack.pop();
                        leftNum = valueStack.pop();
                        String result = calc(leftNum,rightNum,str[i]);
                        valueStack.push(result);
                    }catch(EmptyStackException empty)
                    {
                        return "算式出现异常";
                    }
                    
                    
                }
                else
                {
                    // 遇到数字进栈
                    valueStack.push(str[i]);
                }
            }
            if(!valueStack.isEmpty())
            {
                return valueStack.pop();
            }
            return "栈为空 ,出现错误!";
        }
        
        public static String calc(String leftNum, String rightNum, String ope)
        {
            BigDecimal bigLeftNum = null;
            BigDecimal bigRightnum = null;
            try
            {
                bigLeftNum = new BigDecimal(leftNum);
                bigRightnum = new BigDecimal(rightNum);
            }catch(NumberFormatException e)
            {
                return "算式出现异常";
            }
            switch(ope.charAt(0))
            {
                // 处理加法
                case ADD:return  bigLeftNum.add(bigRightnum).toString();
                // 处理减法
                case SUB:return  bigLeftNum.subtract(bigRightnum).toString();
                // 处理乘法
                case MUL:return  bigLeftNum.multiply(bigRightnum).toString();
                // 处理乘法
                case DIV:
                    {
                        if(bigRightnum.doubleValue()==0)
                        {
                            return "除数为零";
                        }
                        // 20为小数点后的位数
                        String result = bigLeftNum.divide(bigRightnum,20,BigDecimal.ROUND_DOWN).toString();
                        int mark = 0;
                        if( (mark = result.indexOf('.'))!=-1)
                        {
                            for(int i=mark; i<result.length(); i++)
                            {
                                if(result.charAt(i)!='0')
                                {
                                    mark = i;
                                }
                            }
                            Log.d("mark--1 :", mark+"");
                            if(result.charAt(mark)=='.')
                            {
                                mark -= 1;
                            }
                            Log.d("mark--2 :", mark+"");
                            
                            Log.d("result", result.substring(0,mark+1));
                            result = result.substring(0,mark+1);
                            return result;
                        }
                        else
                        {
                            return result;
                        }
                        
                    }
            }
            return null;
        }
        
        
        
        // 测试括号匹配 - —
        public static void main(String[] s)
        {
            String str1 = "﹙5.3+3﹚×﹙3+8﹚";
            String str2 = "[{}]{}";
            String str3 = "({}{})";
            String str4 = "16.2+(6.72-4.25)-3.72";
            String str5 = "(((10+7)*(20/30))-(2*40))";
            String str6 = "12";
            
            Calculator cal = new Calculator(str1);
            System.out.println("匹配:"+cal.isBalanced());
            System.out.println("后缀:"+cal.getSuffix());
            String reult = cal.getResult();
            System.out.println("结果: "+reult);
            
        }
    }

    MycalcActivity.java

    package com.manymore13.calc;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.Context;
    import android.os.Bundle;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.View.OnFocusChangeListener;
    import android.view.inputmethod.InputMethodManager;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class MyCalcActivity extends Activity {
        
        AlertDialog.Builder  mBuilder ; 
        private List<Button> buttonList = new ArrayList<Button>(25); 
        private Button[] num = new Button[10];
        private Calculator cal = new Calculator();
        private TextView tviewPrompt; 
        private boolean legal = true;
        int[] Idnum = new int[]
                {
                    R.id.num0,
                    R.id.num1,
                    R.id.num2,
                    R.id.num3,
                    R.id.num4,
                    R.id.num5,
                    R.id.num6,
                    R.id.num7,
                    R.id.num8,
                    R.id.num9
                }; 
        private static EditText edit;
        private Button btnAdd;
        private Button btnSub;
        private Button btnMul;
        private Button btnDiv;
        private Button btnPot;
        private Button btnEqu;
        private Button btnBC;
        private Button btnAC;
        private Button btnLeft;
        private Button btnRight;
        private Button btnMinus; // 负号
        
        private Button btnMoveLeft;
        private Button btnMoveRight;
        public static EditText getEdit()
        {
            return edit;
        }
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            this.findView();
         
            
            // 屏蔽软键盘 这样做有个弊端,就是不能自动换行
    //      edit.setInputType(InputType.TYPE_NULL);
    //      edit.setInputType(InputType.TYPE_DATETIME_VARIATION_NORMAL);
            
            
            edit.addTextChangedListener(new TextWatcher() {
                String str;
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    str = s.toString();
                    cal.setExpression(str);
    
                    if(str.equals("")||(str.indexOf(Calculator.LEFT_NORMAL)==-1
                            &&str.indexOf(Calculator.RIGHT_NORMAL)==-1))
                    {
                        legal = true;
                        tviewPrompt.setText(R.string.kong);
                    }else if(cal.isBalanced())
                    {
                        System.out.println(cal.isBalanced());
                        legal = true;
                        tviewPrompt.setText(R.string.legal);
                    }else
                    {
                        legal = false;
                        tviewPrompt.setText(R.string.wrongful);
                    }
                    
                }
                
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,
                        int after) {                
                }
                
                @Override
                public void afterTextChanged(Editable s) {
                    
                    
                }
            });
            for(Button current:buttonList)
            {
                System.out.println(current.getText());
                current.setOnClickListener(new btnOnclickListtenner());
            }
            
            // 屏蔽软键盘
            edit.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    
                    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
                    edit.setBackgroundColor(0x7f48D1CC);
                    
                }
            });
            
            edit.setOnFocusChangeListener(new OnFocusChangeListener() {
                
                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
                    edit.setBackgroundColor(0x7f48D1CC);
                    
                }
            });
            
        }
        
        
        
        
       public void findView()
       {
           // 获取算式框的实例
           edit = (EditText)findViewById(R.id.editText);
           // 获取数字按钮的实例
           for(int i=0; i<=9; i++)
           {
               num[i] = (Button)findViewById(Idnum[i]);
           }
           
           tviewPrompt = (TextView)findViewById(R.id.tv);
           Collections.addAll(buttonList, num);
           
           btnAdd = (Button)findViewById(R.id.add);
           Collections.addAll(buttonList,btnAdd);
           
           btnSub = (Button)findViewById(R.id.sub);
           Collections.addAll(buttonList,btnSub);
           
           btnMul = (Button)findViewById(R.id.mul);
           Collections.addAll(buttonList,btnMul);
           
           btnDiv = (Button)findViewById(R.id.divide);
           Collections.addAll(buttonList,btnDiv);
           
           btnPot = (Button)findViewById(R.id.pot);
           Collections.addAll(buttonList,btnPot);
           
           btnEqu = (Button)findViewById(R.id.equ);
           Collections.addAll(buttonList,btnEqu);
           
           btnBC  = (Button)findViewById(R.id.bs);
           Collections.addAll(buttonList,btnBC);
           
           btnAC  = (Button)findViewById(R.id.ac);
           Collections.addAll(buttonList,btnAC);
           
           btnLeft = (Button)findViewById(R.id.left);
           Collections.addAll(buttonList, btnLeft);
           
           btnRight = (Button)findViewById(R.id.right);
           Collections.addAll(buttonList, btnRight);
           
           btnMinus = (Button)findViewById(R.id.minus);
           Collections.addAll(buttonList, btnMinus);
           
          
       }
       
       class btnOnclickListtenner implements OnClickListener
       {
          
            @Override
            public void onClick(View v) 
            {
                // 获取EditText的编辑版
                Editable edtTable = edit.getText();
                
                // 获取光标位置
                int where = edit.getSelectionStart();
                String inputData = "";
                switch(v.getId())
                {
                    case R.id.num0:
                    {
                        inputData = "0";
                        break;
                    }
                    case R.id.num1:
                    {
                        inputData = "1";
                        break;
                    }
                    case R.id.num2:
                    {
                        inputData = "2";
                        break;
                    }
                    case R.id.num3:
                    {
                        inputData = "3";
                        break;
                    }
                    case R.id.num4:
                    {
                        inputData = "4";
                        break;
                    }
                    case R.id.num5:
                    {
                        inputData = "5";
                        break;
                    }
                    case R.id.num6:
                    {
                        inputData = "6";
                        break;
                    }
                    case R.id.num7:
                    {
                        inputData = "7";
                        break;
                    }
                    case R.id.num8:
                    {
                        inputData = "8";
                        break;
                    }
                    case R.id.num9:
                    {
                        inputData = "9";
                        break;
                    }
                    // 全部清除
                    case R.id.ac:
                    {
                        inputData = "";
                        edit.setText("");
                    }
                    // 退格键
                    case R.id.bs:
                    {
                        if(where >0)
                        {
                            edtTable.delete(where-1, where);
                        }
                        break;
                    }
                    case R.id.add:
                    {
                        inputData = Calculator.ADD+"";
                        break;
                    }
                    case R.id.sub:
                    {
                        inputData = Calculator.SUB+"";
                        break;
                    }
                    case R.id.mul:
                    {
                        inputData = Calculator.MUL+"";
                        break;
                    }
                    case R.id.divide:
                    {
                        inputData = Calculator.DIV+"";
                        break;
                    }
                    case R.id.pot:
                    {
                        inputData = ".";
                        break;
                    }
                    case R.id.left:
                    {
                        inputData = Calculator.LEFT_NORMAL+"";
                        break;
                    }
                    case R.id.right:
                    {
                        inputData = Calculator.RIGHT_NORMAL+"";
                        break;
                    }
                    case R.id.minus:
                    {
                        inputData = Calculator.MINUS+"";
                        break;
                    }
                    // 处理光标左移
                    
                    //处理等于
                    case R.id.equ:
                    {
                        
                        inputData = "";
                        String str = edtTable.toString();
                        where = str.length();
                        if(checkLegal(str))
                        {
                            cal.setExpression(edtTable.toString());
                            String result = cal.getResult();
                            inputData = "
    "+Calculator.equ+result;
                            
                        }
                        break;
                        
                    }
                }
                
                edtTable.insert(where, inputData);
            }
            // 检查运算式是否合格
            public boolean checkLegal(String exp)
            {
                if( (legal && (!exp.equals(""))&&(exp.indexOf(Calculator.equ)==-1))
                        &&(exp.indexOf(Calculator.ADD)!=-1 ||exp.indexOf(Calculator.SUB)!=-1
                         ||exp.indexOf(Calculator.MUL)!=-1 ||exp.indexOf(Calculator.DIV)!=-1))
                {
                    return true;
                }
                return false;
            }
               
       }
       
       public boolean onCreateOptionsMenu(Menu menu)  
       {  
           menu.add(0,1,0,"关于");  
           menu.add(1,2,1,"退出");  
           return true;   // 这里要返回true 否则菜单不显示  
       }      
        @Override
        public boolean onOptionsItemSelected(MenuItem item) 
        {
            mBuilder = new AlertDialog.Builder(this); 
        
            if(item.getItemId()==1)
            {
                mBuilder.setMessage(R.string.abount).setTitle("关 于").show().setInverseBackgroundForced(true);
            }
            
            else
            {
                finish();
            }
            return super.onOptionsItemSelected(item);
        }
    }
  • 相关阅读:
    Swift基础
    win32多线程 (六)信号量 Synchronization
    win32 多线程 (五)Event
    win32多线程 (四) Mutex
    win32多线程(三) 死锁
    win32多线程 (二)线程同步之临界区 (critical sections)
    win32多线程 (一) 线程创建与结束等待
    简单Factory模式
    单键模式
    jquery中click事件重复绑定问题
  • 原文地址:https://www.cnblogs.com/bobbywei/p/5054985.html
Copyright © 2020-2023  润新知