Android calculator simple logic implements instance sharing

  • 2020-05-19 05:53:40
  • OfStack

Quote:

My android calculator is implemented as follows: button input 1 time, processing 1 time.

But if you've learned about data structures (stacks), you can use expression parsing (prefixes, suffixes).

And this method has been very mature, but time is limited, only completed this simple calculator.

As for the Android layout, it has been posted on my blog and will not be covered.


package com.example.androidlessontwo;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity  {
    private Button[] buttonNum=new Button[11];
    private Button[] buttonComand=new Button[5];
    private TextView input=null;
    private TextView rl=null;
    private Button   buttonClear=null;
    private boolean firstFlag=true;
    private double result=0.0;
    private String lastCommand;

    public void MyCalculator()
    {
        result = 0.0;
        firstFlag=true;
        lastCommand="=";
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonNum[0]=(Button) findViewById(R.id.num0);
        buttonNum[1]=(Button) findViewById(R.id.num1);
        buttonNum[2]=(Button) findViewById(R.id.num2);
        buttonNum[3]=(Button) findViewById(R.id.num3);
        buttonNum[4]=(Button) findViewById(R.id.num4);
        buttonNum[5]=(Button) findViewById(R.id.num5);
        buttonNum[6]=(Button) findViewById(R.id.num6);
        buttonNum[7]=(Button) findViewById(R.id.num7);
        buttonNum[8]=(Button) findViewById(R.id.num8);
        buttonNum[9]=(Button) findViewById(R.id.num9);
        buttonNum[10]=(Button) findViewById(R.id.point);

        buttonComand[0]=(Button) findViewById(R.id.add);
        buttonComand[1]=(Button) findViewById(R.id.sub);
        buttonComand[2]=(Button) findViewById(R.id.ride);
        buttonComand[3]=(Button) findViewById(R.id.divide);
        buttonComand[4]=(Button) findViewById(R.id.equal);

        input=(TextView) findViewById(R.id.input);
        rl   =(TextView) findViewById(R.id.rl);
        buttonClear=(Button) findViewById(R.id.clean);

        NumberAction na= new NumberAction();
        CommandAction ca=new CommandAction();
        for(Button bc:buttonComand)
        {
            bc.setOnClickListener(ca);
        }
        for(Button bc:buttonNum)
        {
            bc.setOnClickListener(na);
        }
        buttonClear.setOnClickListener(new Button.OnClickListener()
        {
            @Override
            public void onClick(View v) {
                MyCalculator();
                rl.setText("0.0");
            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    private class NumberAction implements Button.OnClickListener
    {
        @Override
        public void onClick(View view) 
        {
            Button btn = (Button)view;
            String inputTemp =btn.getText().toString();//6
            input.setText(input.getText().toString()+inputTemp);    
            double numtemp = 0;
            switch(btn.getId())
            {
                case R.id.num0:
                {
                    if(firstFlag)
                        {
                            result=result*10+0;
                            firstFlag=false;
                        }
                    else
                        numtemp=numtemp*10+0;
                    break;
                }
                case R.id.num1:
                {
                    if(firstFlag)
                        {
                        result=result*10+1;
                            firstFlag=false;
                        }
                    else
                        numtemp=numtemp*10+1;
                    break;
                }
                case R.id.num2:
                {
                    if(firstFlag)
                        {
                        result=result*10+2;
                            firstFlag=false;
                        }
                    else
                        numtemp=numtemp*10+2;
                    break;
                }
                case R.id.num3:
                {
                    if(firstFlag)
                        {
                        result=result*10+3;
                            firstFlag=false;
                        }
                    else
                        numtemp=numtemp*10+3;
                    break;
                }
                case R.id.num4:
                {
                    if(firstFlag)
                        {
                        result=result*10+4;
                            firstFlag=false;
                        }
                    else
                        numtemp=numtemp*10+4;
                    break;
                }
                case R.id.num5:
                {
                    if(firstFlag)
                        {
                        result=result*10+5;
                            firstFlag=false;
                        }
                    else
                        numtemp=numtemp*10+5;
                    break;
                }
                case R.id.num6:
                {
                    if(firstFlag)
                        {
                        result=result*10+6;
                            firstFlag=false;
                        }
                    else
                        {
                            numtemp=numtemp*10+6;
                            calculate(numtemp);
                        }
                    break;
                }
                case R.id.num7:
                {
                    if(firstFlag)
                        {
                            result=result*10+7;
                            firstFlag=false;
                        }
                    else
                    {
                        numtemp=numtemp*10+7;
                        calculate(numtemp);
                    }
                    break;
                }
                case R.id.num8:
                {
                    if(firstFlag)
                        {
                        result=result*10+8;
                            {
                                result=result*10+8;
                                firstFlag=false;
                            }
                        }
                    else
                        {
                            numtemp=numtemp*10+8;
                            calculate(numtemp);
                        }
                    break;
                }
                case R.id.num9:
                {
                    if(firstFlag)
                        {
                        result=result*10+9;
                            firstFlag=false;
                        }
                    else
                        {
                            numtemp=numtemp*10+9;
                            calculate(numtemp);
                        }
                    break;
                }    
            }            

            

            
        }

    }

    private class CommandAction implements Button.OnClickListener
    {
        @Override
        public void onClick(View v) 
        {
            Button btn=(Button)v;
            String inputCommand=(String)btn.getText();
            switch(btn.getId())
            {
                case R.id.add:
                {
                    lastCommand="+";
                    break;
                }
                case R.id.sub:
                {
                    lastCommand="-";
                    break;
                }
                case R.id.ride:
                {
                    lastCommand="*";
                    break;
                }
                case R.id.divide:
                {
                    lastCommand="/";
                    break;
                }
                case R.id.equal:
                {
                    lastCommand="=";
                    input.setText("");
                    rl.setText(String.valueOf(result));
                    return ;
                }

            }
            input.setText(input.getText()+inputCommand);    
        }

    }
    private void calculate(double x)
    {

        
         if(lastCommand.equals("+"))
            {
                result += x;
            }

         if(lastCommand.equals("-"))
            {
                result -= x;
            }

         if(lastCommand.equals("*"))
            {
                result *= x;
            }

         if(lastCommand.equals("/"))
            {
                result /= x;
            }
    }

}


Related articles: