Hello Guys,
Here I share a sample code for Simple and Scientific Calculator.
Sample Code:
File: MainActivity.java
package com.sneha.calculatordemo;
import java.text.DecimalFormat;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener
{
private TextView mCalculatorDisplay;
private Boolean userIsInTheMiddleOfTypingANumber = false;
private CalculatorBrain mCalculatorBrain;
private static final String DIGITS = "0123456789.";
DecimalFormat df = new DecimalFormat("@###########");
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState)
{
// hide the window title.
requestWindowFeature(Window.FEATURE_NO_TITLE);
// hide the status bar and other OS-level chrome
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCalculatorBrain = new CalculatorBrain();
mCalculatorDisplay = (TextView) findViewById(R.id.textView1);
df.setMinimumFractionDigits(0);
df.setMinimumIntegerDigits(1);
df.setMaximumIntegerDigits(8);
findViewById(R.id.button0).setOnClickListener(this);
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
findViewById(R.id.button3).setOnClickListener(this);
findViewById(R.id.button4).setOnClickListener(this);
findViewById(R.id.button5).setOnClickListener(this);
findViewById(R.id.button6).setOnClickListener(this);
findViewById(R.id.button7).setOnClickListener(this);
findViewById(R.id.button8).setOnClickListener(this);
findViewById(R.id.button9).setOnClickListener(this);
findViewById(R.id.buttonAdd).setOnClickListener(this);
findViewById(R.id.buttonSubtract).setOnClickListener(this);
findViewById(R.id.buttonMultiply).setOnClickListener(this);
findViewById(R.id.buttonDivide).setOnClickListener(this);
findViewById(R.id.buttonToggleSign).setOnClickListener(this);
findViewById(R.id.buttonDecimalPoint).setOnClickListener(this);
findViewById(R.id.buttonEquals).setOnClickListener(this);
findViewById(R.id.buttonClear).setOnClickListener(this);
findViewById(R.id.buttonClearMemory).setOnClickListener(this);
findViewById(R.id.buttonAddToMemory).setOnClickListener(this);
findViewById(R.id.buttonSubtractFromMemory).setOnClickListener(this);
findViewById(R.id.buttonRecallMemory).setOnClickListener(this);
// The following buttons only exist in layout-land (Landscape mode) and require extra attention.
// The messier option is to place the buttons in the regular layout too and set android:visibility="invisible".
if (findViewById(R.id.buttonSquareRoot) != null)
{
findViewById(R.id.buttonSquareRoot).setOnClickListener(this);
}
if (findViewById(R.id.buttonSquared) != null)
{
findViewById(R.id.buttonSquared).setOnClickListener(this);
}
if (findViewById(R.id.buttonInvert) != null)
{
findViewById(R.id.buttonInvert).setOnClickListener(this);
}
if (findViewById(R.id.buttonSine) != null)
{
findViewById(R.id.buttonSine).setOnClickListener(this);
}
if (findViewById(R.id.buttonSineh) != null)
{
findViewById(R.id.buttonSineh).setOnClickListener(this);
}
if (findViewById(R.id.buttonCosine) != null)
{
findViewById(R.id.buttonCosine).setOnClickListener(this);
}
if (findViewById(R.id.buttonCosh) != null)
{
findViewById(R.id.buttonCosh).setOnClickListener(this);
}
if (findViewById(R.id.buttonTangent) != null)
{
findViewById(R.id.buttonTangent).setOnClickListener(this);
}
if (findViewById(R.id.buttonTanh) != null)
{
findViewById(R.id.buttonTanh).setOnClickListener(this);
}
if (findViewById(R.id.buttonLog) != null)
{
findViewById(R.id.buttonLog).setOnClickListener(this);
}
if (findViewById(R.id.buttonCubeRoot) != null)
{
findViewById(R.id.buttonCubeRoot).setOnClickListener(this);
}
if (findViewById(R.id.buttonPow) != null)
{
findViewById(R.id.buttonPow).setOnClickListener(this);
}
if (findViewById(R.id.buttonExp) != null)
{
findViewById(R.id.buttonExp).setOnClickListener(this);
}
if (findViewById(R.id.buttonAsin) != null)
{
findViewById(R.id.buttonAsin).setOnClickListener(this);
}
if (findViewById(R.id.buttonAcos) != null)
{
findViewById(R.id.buttonAcos).setOnClickListener(this);
}
if (findViewById(R.id.buttonAtan) != null)
{
findViewById(R.id.buttonAtan).setOnClickListener(this);
}
if (findViewById(R.id.buttonPI) != null)
{
findViewById(R.id.buttonPI).setOnClickListener(this);
}
}
@Override
public void onClick(View v)
{
String buttonPressed = ((Button) v).getText().toString();
if (DIGITS.contains(buttonPressed))
{
// digit was pressed
if (userIsInTheMiddleOfTypingANumber)
{
if (buttonPressed.equals(".") && mCalculatorDisplay.getText().toString().contains("."))
{
}
else
{
mCalculatorDisplay.append(buttonPressed);
}
}
else
{
if (buttonPressed.equals("."))
{
// ERROR PREVENTION
// This will avoid error if only the decimal is hit before an operator, by placing a leading zero
// before the decimal
mCalculatorDisplay.setText(0 + buttonPressed);
}
else
{
mCalculatorDisplay.setText(buttonPressed);
}
userIsInTheMiddleOfTypingANumber = true;
}
}
else
{
// operation was pressed
if (userIsInTheMiddleOfTypingANumber)
{ mCalculatorBrain.setOperand(Double.parseDouble(mCalculatorDisplay.getText().toString()));
userIsInTheMiddleOfTypingANumber = false;
}
mCalculatorBrain.performOperation(buttonPressed);
mCalculatorDisplay.setText(df.format(mCalculatorBrain.getResult()));
}
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
// Save variables on screen orientation change
outState.putDouble("OPERAND", mCalculatorBrain.getResult());
outState.putDouble("MEMORY", mCalculatorBrain.getMemory());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
// Restore variables on screen orientation change
mCalculatorBrain.setOperand(savedInstanceState.getDouble("OPERAND"));
mCalculatorBrain.setMemory(savedInstanceState.getDouble("MEMORY"));
mCalculatorDisplay.setText(df.format(mCalculatorBrain.getResult()));
}
}
File: CalculatorBrain.java
package com.sneha.calculatordemo;
public class CalculatorBrain
{
// 3 + 6 = 9
// 3 & 6 are called the operand.
// The + is called the operator.
// 9 is the result of the operation.
private double mOperand;
private double mWaitingOperand;
private String mWaitingOperator;
private double mCalculatorMemory;
// operator types
public static final String ADD = "+";
public static final String SUBTRACT = "-";
public static final String MULTIPLY = "*";
public static final String DIVIDE = "/";
public static final String CLEAR = "C" ;
public static final String CLEARMEMORY = "MC";
public static final String ADDTOMEMORY = "M+";
public static final String SUBTRACTFROMMEMORY = "M-";
public static final String RECALLMEMORY = "MR";
public static final String SQUAREROOT = "√";
public static final String SQUARED = "x²";
public static final String INVERT = "1/x";
public static final String TOGGLESIGN = "+/-";
public static final String SINE = "sin";
public static final String SINEH = "sinh";
public static final String COSINE = "cos";
public static final String COSH = "cosh";
public static final String TANGENT = "tan";
public static final String TANH = "tanh";
public static final String LOG = "log";
public static final String CUBEROOT = "³√";
public static final String POW = "pow";
public static final String EXP = "exp";
public static final String ASIN = "asin";
public static final String ACOS = "acos";
public static final String ATAN= "atan";
public static final String PI= "π";
// constructor
public CalculatorBrain()
{
// initialize variables upon start
mOperand = 0;
mWaitingOperand = 0;
mWaitingOperator = "";
mCalculatorMemory = 0;
}
public void setOperand(double operand)
{
mOperand = operand;
}
public double getResult()
{
return mOperand;
}
// used on screen orientation change
public void setMemory(double calculatorMemory)
{
mCalculatorMemory = calculatorMemory;
}
// used on screen orientation change
public double getMemory()
{
return mCalculatorMemory;
}
public String toString()
{
return Double.toString(mOperand);
}
protected double performOperation(String operator)
{
if (operator.equals(CLEAR))
{
mOperand = 0;
mWaitingOperator = "";
mWaitingOperand = 0;
// mCalculatorMemory = 0;
}
else if (operator.equals(CLEARMEMORY))
{
mCalculatorMemory = 0;
}
else if (operator.equals(ADDTOMEMORY))
{
mCalculatorMemory = mCalculatorMemory + mOperand;
}
else if (operator.equals(SUBTRACTFROMMEMORY))
{
mCalculatorMemory = mCalculatorMemory - mOperand;
}
else if (operator.equals(RECALLMEMORY))
{
mOperand = mCalculatorMemory;
}
else if (operator.equals(SQUAREROOT))
{
mOperand = Math.sqrt(mOperand);
}
else if (operator.equals(SQUARED))
{
mOperand = mOperand * mOperand;
}
else if (operator.equals(INVERT))
{
if (mOperand != 0)
{
mOperand = 1 / mOperand;
}
}
else if (operator.equals(TOGGLESIGN))
{
mOperand = -mOperand;
}
else if (operator.equals(SINE))
{
mOperand = Math.sin((mOperand));
}
else if (operator.equals(SINEH))
{
mOperand = Math.sinh((mOperand));
}
else if (operator.equals(COSINE))
{
mOperand = Math.cos((mOperand));
}
else if (operator.equals(COSH))
{
mOperand = Math.cosh((mOperand));
}
else if (operator.equals(TANGENT))
{
mOperand = Math.tan((mOperand));
}
else if (operator.equals(TANH))
{
mOperand = Math.tanh((mOperand));
}
else if (operator.equals(LOG))
{
mOperand = Math.log10((mOperand));
}
else if (operator.equals(CUBEROOT))
{
mOperand = Math.cbrt((mOperand));
}
else if (operator.equals(POW))
{
mOperand = Math.pow(mOperand, mOperand);
}
else if (operator.equals(EXP))
{
mOperand = Math.exp(mOperand);
}
else if (operator.equals(ASIN))
{
mOperand = Math.asin(mOperand);
}
else if (operator.equals(ACOS))
{
mOperand = Math.acos(mOperand);
}
else if (operator.equals(ATAN))
{
mOperand = Math.atan(mOperand);
}
else if (operator.equals(PI))
{
mOperand = Math.PI;
}
else
{
performWaitingOperation();
mWaitingOperator = operator;
mWaitingOperand = mOperand;
}
return mOperand;
}
protected void performWaitingOperation()
{
if (mWaitingOperator.equals(ADD))
{
mOperand = mWaitingOperand + mOperand;
}
else if (mWaitingOperator.equals(SUBTRACT))
{
mOperand = mWaitingOperand - mOperand;
}
else if (mWaitingOperator.equals(MULTIPLY))
{
mOperand = mWaitingOperand * mOperand;
}
else if (mWaitingOperator.equals(DIVIDE))
{
if (mOperand != 0)
{
mOperand = mWaitingOperand / mOperand;
}
}
}
}
Output:
Download Full Source Code From Here: Calculator
Happy Coding...!!!
Here I share a sample code for Simple and Scientific Calculator.
Sample Code:
File: MainActivity.java
package com.sneha.calculatordemo;
import java.text.DecimalFormat;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener
{
private TextView mCalculatorDisplay;
private Boolean userIsInTheMiddleOfTypingANumber = false;
private CalculatorBrain mCalculatorBrain;
private static final String DIGITS = "0123456789.";
DecimalFormat df = new DecimalFormat("@###########");
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState)
{
// hide the window title.
requestWindowFeature(Window.FEATURE_NO_TITLE);
// hide the status bar and other OS-level chrome
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCalculatorBrain = new CalculatorBrain();
mCalculatorDisplay = (TextView) findViewById(R.id.textView1);
df.setMinimumFractionDigits(0);
df.setMinimumIntegerDigits(1);
df.setMaximumIntegerDigits(8);
findViewById(R.id.button0).setOnClickListener(this);
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
findViewById(R.id.button3).setOnClickListener(this);
findViewById(R.id.button4).setOnClickListener(this);
findViewById(R.id.button5).setOnClickListener(this);
findViewById(R.id.button6).setOnClickListener(this);
findViewById(R.id.button7).setOnClickListener(this);
findViewById(R.id.button8).setOnClickListener(this);
findViewById(R.id.button9).setOnClickListener(this);
findViewById(R.id.buttonAdd).setOnClickListener(this);
findViewById(R.id.buttonSubtract).setOnClickListener(this);
findViewById(R.id.buttonMultiply).setOnClickListener(this);
findViewById(R.id.buttonDivide).setOnClickListener(this);
findViewById(R.id.buttonToggleSign).setOnClickListener(this);
findViewById(R.id.buttonDecimalPoint).setOnClickListener(this);
findViewById(R.id.buttonEquals).setOnClickListener(this);
findViewById(R.id.buttonClear).setOnClickListener(this);
findViewById(R.id.buttonClearMemory).setOnClickListener(this);
findViewById(R.id.buttonAddToMemory).setOnClickListener(this);
findViewById(R.id.buttonSubtractFromMemory).setOnClickListener(this);
findViewById(R.id.buttonRecallMemory).setOnClickListener(this);
// The following buttons only exist in layout-land (Landscape mode) and require extra attention.
// The messier option is to place the buttons in the regular layout too and set android:visibility="invisible".
if (findViewById(R.id.buttonSquareRoot) != null)
{
findViewById(R.id.buttonSquareRoot).setOnClickListener(this);
}
if (findViewById(R.id.buttonSquared) != null)
{
findViewById(R.id.buttonSquared).setOnClickListener(this);
}
if (findViewById(R.id.buttonInvert) != null)
{
findViewById(R.id.buttonInvert).setOnClickListener(this);
}
if (findViewById(R.id.buttonSine) != null)
{
findViewById(R.id.buttonSine).setOnClickListener(this);
}
if (findViewById(R.id.buttonSineh) != null)
{
findViewById(R.id.buttonSineh).setOnClickListener(this);
}
if (findViewById(R.id.buttonCosine) != null)
{
findViewById(R.id.buttonCosine).setOnClickListener(this);
}
if (findViewById(R.id.buttonCosh) != null)
{
findViewById(R.id.buttonCosh).setOnClickListener(this);
}
if (findViewById(R.id.buttonTangent) != null)
{
findViewById(R.id.buttonTangent).setOnClickListener(this);
}
if (findViewById(R.id.buttonTanh) != null)
{
findViewById(R.id.buttonTanh).setOnClickListener(this);
}
if (findViewById(R.id.buttonLog) != null)
{
findViewById(R.id.buttonLog).setOnClickListener(this);
}
if (findViewById(R.id.buttonCubeRoot) != null)
{
findViewById(R.id.buttonCubeRoot).setOnClickListener(this);
}
if (findViewById(R.id.buttonPow) != null)
{
findViewById(R.id.buttonPow).setOnClickListener(this);
}
if (findViewById(R.id.buttonExp) != null)
{
findViewById(R.id.buttonExp).setOnClickListener(this);
}
if (findViewById(R.id.buttonAsin) != null)
{
findViewById(R.id.buttonAsin).setOnClickListener(this);
}
if (findViewById(R.id.buttonAcos) != null)
{
findViewById(R.id.buttonAcos).setOnClickListener(this);
}
if (findViewById(R.id.buttonAtan) != null)
{
findViewById(R.id.buttonAtan).setOnClickListener(this);
}
if (findViewById(R.id.buttonPI) != null)
{
findViewById(R.id.buttonPI).setOnClickListener(this);
}
}
@Override
public void onClick(View v)
{
String buttonPressed = ((Button) v).getText().toString();
if (DIGITS.contains(buttonPressed))
{
// digit was pressed
if (userIsInTheMiddleOfTypingANumber)
{
if (buttonPressed.equals(".") && mCalculatorDisplay.getText().toString().contains("."))
{
}
else
{
mCalculatorDisplay.append(buttonPressed);
}
}
else
{
if (buttonPressed.equals("."))
{
// ERROR PREVENTION
// This will avoid error if only the decimal is hit before an operator, by placing a leading zero
// before the decimal
mCalculatorDisplay.setText(0 + buttonPressed);
}
else
{
mCalculatorDisplay.setText(buttonPressed);
}
userIsInTheMiddleOfTypingANumber = true;
}
}
else
{
// operation was pressed
if (userIsInTheMiddleOfTypingANumber)
{ mCalculatorBrain.setOperand(Double.parseDouble(mCalculatorDisplay.getText().toString()));
userIsInTheMiddleOfTypingANumber = false;
}
mCalculatorBrain.performOperation(buttonPressed);
mCalculatorDisplay.setText(df.format(mCalculatorBrain.getResult()));
}
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
// Save variables on screen orientation change
outState.putDouble("OPERAND", mCalculatorBrain.getResult());
outState.putDouble("MEMORY", mCalculatorBrain.getMemory());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
// Restore variables on screen orientation change
mCalculatorBrain.setOperand(savedInstanceState.getDouble("OPERAND"));
mCalculatorBrain.setMemory(savedInstanceState.getDouble("MEMORY"));
mCalculatorDisplay.setText(df.format(mCalculatorBrain.getResult()));
}
}
File: CalculatorBrain.java
package com.sneha.calculatordemo;
public class CalculatorBrain
{
// 3 + 6 = 9
// 3 & 6 are called the operand.
// The + is called the operator.
// 9 is the result of the operation.
private double mOperand;
private double mWaitingOperand;
private String mWaitingOperator;
private double mCalculatorMemory;
// operator types
public static final String ADD = "+";
public static final String SUBTRACT = "-";
public static final String MULTIPLY = "*";
public static final String DIVIDE = "/";
public static final String CLEAR = "C" ;
public static final String CLEARMEMORY = "MC";
public static final String ADDTOMEMORY = "M+";
public static final String SUBTRACTFROMMEMORY = "M-";
public static final String RECALLMEMORY = "MR";
public static final String SQUAREROOT = "√";
public static final String SQUARED = "x²";
public static final String INVERT = "1/x";
public static final String TOGGLESIGN = "+/-";
public static final String SINE = "sin";
public static final String SINEH = "sinh";
public static final String COSINE = "cos";
public static final String COSH = "cosh";
public static final String TANGENT = "tan";
public static final String TANH = "tanh";
public static final String LOG = "log";
public static final String CUBEROOT = "³√";
public static final String POW = "pow";
public static final String EXP = "exp";
public static final String ASIN = "asin";
public static final String ACOS = "acos";
public static final String ATAN= "atan";
public static final String PI= "π";
// constructor
public CalculatorBrain()
{
// initialize variables upon start
mOperand = 0;
mWaitingOperand = 0;
mWaitingOperator = "";
mCalculatorMemory = 0;
}
public void setOperand(double operand)
{
mOperand = operand;
}
public double getResult()
{
return mOperand;
}
// used on screen orientation change
public void setMemory(double calculatorMemory)
{
mCalculatorMemory = calculatorMemory;
}
// used on screen orientation change
public double getMemory()
{
return mCalculatorMemory;
}
public String toString()
{
return Double.toString(mOperand);
}
protected double performOperation(String operator)
{
if (operator.equals(CLEAR))
{
mOperand = 0;
mWaitingOperator = "";
mWaitingOperand = 0;
// mCalculatorMemory = 0;
}
else if (operator.equals(CLEARMEMORY))
{
mCalculatorMemory = 0;
}
else if (operator.equals(ADDTOMEMORY))
{
mCalculatorMemory = mCalculatorMemory + mOperand;
}
else if (operator.equals(SUBTRACTFROMMEMORY))
{
mCalculatorMemory = mCalculatorMemory - mOperand;
}
else if (operator.equals(RECALLMEMORY))
{
mOperand = mCalculatorMemory;
}
else if (operator.equals(SQUAREROOT))
{
mOperand = Math.sqrt(mOperand);
}
else if (operator.equals(SQUARED))
{
mOperand = mOperand * mOperand;
}
else if (operator.equals(INVERT))
{
if (mOperand != 0)
{
mOperand = 1 / mOperand;
}
}
else if (operator.equals(TOGGLESIGN))
{
mOperand = -mOperand;
}
else if (operator.equals(SINE))
{
mOperand = Math.sin((mOperand));
}
else if (operator.equals(SINEH))
{
mOperand = Math.sinh((mOperand));
}
else if (operator.equals(COSINE))
{
mOperand = Math.cos((mOperand));
}
else if (operator.equals(COSH))
{
mOperand = Math.cosh((mOperand));
}
else if (operator.equals(TANGENT))
{
mOperand = Math.tan((mOperand));
}
else if (operator.equals(TANH))
{
mOperand = Math.tanh((mOperand));
}
else if (operator.equals(LOG))
{
mOperand = Math.log10((mOperand));
}
else if (operator.equals(CUBEROOT))
{
mOperand = Math.cbrt((mOperand));
}
else if (operator.equals(POW))
{
mOperand = Math.pow(mOperand, mOperand);
}
else if (operator.equals(EXP))
{
mOperand = Math.exp(mOperand);
}
else if (operator.equals(ASIN))
{
mOperand = Math.asin(mOperand);
}
else if (operator.equals(ACOS))
{
mOperand = Math.acos(mOperand);
}
else if (operator.equals(ATAN))
{
mOperand = Math.atan(mOperand);
}
else if (operator.equals(PI))
{
mOperand = Math.PI;
}
else
{
performWaitingOperation();
mWaitingOperator = operator;
mWaitingOperand = mOperand;
}
return mOperand;
}
protected void performWaitingOperation()
{
if (mWaitingOperator.equals(ADD))
{
mOperand = mWaitingOperand + mOperand;
}
else if (mWaitingOperator.equals(SUBTRACT))
{
mOperand = mWaitingOperand - mOperand;
}
else if (mWaitingOperator.equals(MULTIPLY))
{
mOperand = mWaitingOperand * mOperand;
}
else if (mWaitingOperator.equals(DIVIDE))
{
if (mOperand != 0)
{
mOperand = mWaitingOperand / mOperand;
}
}
}
}
Output:
Download Full Source Code From Here: Calculator
Happy Coding...!!!
No comments:
Post a Comment