You are on page 1of 46

N01346254 Inderjit Singh

Before calculations:
Performing Add operation
Performing Subtraction operation to the previous ans
Performing Multiplication operation to the previous ans
Performing Division operation to the previous ans
Memory Plus (M+):
Memory Minus (M-):
Memory Recall (MR):
Memory Clear (MC):
Recalling memory again
Clear(C)
Exponent:
Pie button
Percentage (2+3%)
Radix point calculation
Source Code:
Calculator.java
package com.alqaraghuli.mycalculator;

import android.view.View;

public class Calculator {


String numberString = "0";
String detailsString = "";
String numberStringNew= "";
float pie = (float) 3.14;

long intNumber=0;
double floatNumber;
float realNumber;
boolean isIntNumber = true;
boolean numHasRadixPoint = false;
long memoryInt = 0;
double memoryDouble = 0.0;
float nValueOne,nValueTwo;
double Result= 0.0;
boolean
addition,subtraction,multiplication,division,pieStatus,expStatus,memRecall,perctStatu
s=false;
boolean isIntMemory = true;

public Calculator() {
}

public void processNumber(int i) {

if (numberString.length() < 12) { // limit of 12 digits


/* if(numHasRadixPoint==true) {
intNumber = intNumber * 10 + i;
numberString = (numberStringNew) + String.valueOf(intNumber);
}
// detailsString = ""+ i;
// detailsString = "" + numberString;
else {
intNumber = intNumber + i;
numberString = (numberStringNew) + String.valueOf(intNumber);
}
*/
if(numHasRadixPoint == true){
String DecimalNumber = String.valueOf(i);
numberString = (numberString) + String.valueOf(DecimalNumber);
}
else{

intNumber = (intNumber * 10) + i;


//numberString = String.valueOf(intNumber);
numberString = (numberStringNew) + String.valueOf(intNumber);
}
// detailsText= detailsText+String.valueOf(i);

} else
detailsString = "The number is too long..";
}

public void clearClicked() {


numberString = "0";
numberStringNew="";
detailsString = "";
intNumber = 0;
realNumber = (float) 0.0;
isIntNumber = true;
numHasRadixPoint = false;
}

public void memPlusClicked() {


if (isIntMemory) {
if (isIntNumber) {
memoryInt += intNumber;
detailsString = "Memory: " + memoryInt;
} else {
isIntNumber = false;
memoryDouble = memoryInt + realNumber;
}
}
numHasRadixPoint = false;
}
public void memClearClicked() {
if (isIntMemory) {
if (isIntNumber) {
memoryInt = 0;
detailsString = "Memory: " + 0;
} else {
isIntNumber = false;
memoryDouble = 0;
}
}
numHasRadixPoint = false;
}

public void memMinusClicked() {


if (isIntMemory) {
if (isIntNumber) {
memoryInt -= intNumber;
detailsString = "Memory: " + memoryInt;
} else {
isIntNumber = false;
memoryDouble = memoryInt + realNumber;
}
}
numHasRadixPoint = false;
}

public void memRecallClicked() {


memRecall=true;
if (isIntMemory) {
if (isIntNumber) {
//memoryInt = intNumber;
detailsString = "Memory Recalled Value: " + memoryInt;
numberString=numberStringNew+memoryInt;
} else {
isIntNumber = false;
memoryDouble = memoryInt + realNumber;
}
}
numHasRadixPoint = false;
}
public void radixPointClicked()
{
numHasRadixPoint=true;
numberString=numberString + ".";
//numberStringNew=numberString;

// String s = intNumber+".";
// detailsText = detailsText+".";
// numberString = s;
numHasRadixPoint = true;
}

public void pieClicked()


{
pieStatus=true;

/* nValueOne = (int) intNumber;


numberString = numberString + " 𝜋";
numberStringNew = numberString;
*/

realNumber = (float)
(intNumber * 3.14);
numberString = numberString + "𝜋";
numberStringNew = numberString;

numHasRadixPoint = false;

}
public void perctClicked()
{
perctStatus=true;
floatNumber= (float) intNumber;
realNumber = (float) (floatNumber*
0.01);
numberString=numberString + "%";
numberStringNew=numberString;
numHasRadixPoint = false;
}

public void expClicked()


{
expStatus=true;
int num= (int) intNumber;
realNumber = (float)
Math.pow(2.718,(num));
numberString= "e"+"^"+intNumber;

numberStringNew=numberString;
numHasRadixPoint = false;

}
public void additionClicked() {
addition = true;

if(memRecall==true) {

nValueTwo = memoryInt;
}

if(pieStatus==true)
{
nValueTwo = realNumber;
pieStatus=false;
}

float decimalCheck = Float.parseFloat(numberString);


if(decimalCheck!=0)
{
nValueOne= decimalCheck;
}
else
nValueOne = (float) intNumber;
//numberString = "+";
//detailsString = detailsString + numberString;
numberString=numberString + "+";
numberStringNew=numberString;
intNumber = 0;
if(Result!=0)
{
detailsString="Ans:" + Result;
}
numHasRadixPoint = false;
}

public void subtractionClicked() {


if(memRecall==true) {
nValueTwo = memoryInt;
}
subtraction = true;
if(pieStatus==true)
{
nValueTwo = realNumber;
pieStatus=false;
}
float decimalCheck = Float.parseFloat(numberString);
if(decimalCheck!=0)
{
nValueOne= decimalCheck;
}
else
nValueOne = (float) intNumber;
// nValueOne =(float) intNumber;
//numberString = "-";
intNumber = 0;
numberString=numberString + "-";
numberStringNew=numberString;
if(Result!=0)
{
detailsString="Ans:" + Result;
}
numHasRadixPoint = false;
//detailsString = detailsString + numberString;
}
public void multiplicationClicked() {
if(memRecall==true) {
nValueTwo = memoryInt;
}
multiplication = true;
if(pieStatus==true)
{
nValueTwo = realNumber;
pieStatus=false;
}
float decimalCheck = Float.parseFloat(numberString);
if(decimalCheck!=0)
{
nValueOne= decimalCheck;
}

else
nValueOne = (float) intNumber;
//nValueOne = (float) intNumber;
//numberString = "x";
intNumber = 0;
numberString=numberString + "x";
numberStringNew=numberString;
if(Result!=0)
{
detailsString="Ans:" + Result;
}
numHasRadixPoint = false;
}
public void divisionClicked() {
if(memRecall==true) {
nValueTwo = memoryInt;
}
division = true;
if(pieStatus==true)
{
nValueTwo = realNumber;
pieStatus=false;
}
float decimalCheck = Float.parseFloat(numberString);
if(decimalCheck!=0)
{
nValueOne= decimalCheck;
}
else
nValueOne = (float) intNumber;
// nValueOne = (float) intNumber;
numberString=numberString + "÷";
numberStringNew=numberString;
intNumber = 0;
if(Result!=0)
{
detailsString="Ans:" + Result;
}
numHasRadixPoint = false;
// detailsString = detailsString + numberString;
}

public void equalsClicked() {


//nValueTwo = (int) (intNumber);

if(pieStatus==true) {
nValueTwo = realNumber;
}
else if(perctStatus==true)
{
nValueTwo = realNumber;
//perctStatus=false;
}

else if(memRecall==false) {
nValueTwo = (float) (intNumber);
}
else {
nValueTwo = memoryInt;
memRecall = false;
}

if (addition == true) {
// Result = nValueOne + nValueTwo;
Result = (nValueOne + nValueTwo);
addition = false;
numberString = Float.toString((float) Result);
detailsString = nValueOne + "+" + nValueTwo;
intNumber= (long) Result;

}
if (subtraction == true) {
Result =( nValueOne - nValueTwo);
subtraction = false;
numberString = Float.toString((float) Result);
/* int num1= (int) nValueOne;
int num2= (int) nValueTwo;
detailsString = num1 +"-" +num2;*/
detailsString = nValueOne +"-" +nValueTwo;
intNumber= (long) Result;
}
if (multiplication == true) {
Result = (nValueOne * nValueTwo);
multiplication = false;
numberString = Float.toString((float) Result);
/* int num1= (int) nValueOne;
int num2= (int) nValueTwo;
detailsString = num1 +"x" +num2;
/
*/
detailsString = nValueOne +"x" +nValueTwo;
intNumber= (long) Result;
}
if (division == true) {
Result = (nValueOne / nValueTwo);
division = false;
numberString = Float.toString((float) Result);
/*
int num1= (int) nValueOne;
int num2= (int) nValueTwo;
detailsString = num1 +"÷" +num2;*/
detailsString = nValueOne + "÷" +nValueTwo;
intNumber= (long) Result;
}
if(expStatus==true)
{
Result= (int) realNumber;
numberString = Float.toString((float) Result);
detailsString="e"+"^"+intNumber;
expStatus=false;
}
}
}
MainActivity.java
package com.alqaraghuli.mycalculator;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

TextView tvNumber;
TextView tvDetails;
Calculator calculator;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
calculator = new Calculator();
tvNumber = findViewById(R.id.tv_number);
tvDetails = findViewById(R.id.tv_details);
}

public void numberClicked(View view) {


switch (view.getId()){
case R.id.b_0: calculator.processNumber(0); break;
case R.id.b_1: calculator.processNumber(1); break;
case R.id.b_2: calculator.processNumber(2); break;
case R.id.b_3: calculator.processNumber(3); break;
case R.id.b_4: calculator.processNumber(4); break;
case R.id.b_5: calculator.processNumber(5); break;
case R.id.b_6: calculator.processNumber(6); break;
case R.id.b_7: calculator.processNumber(7); break;
case R.id.b_8: calculator.processNumber(8); break;
case R.id.b_9: calculator.processNumber(9); break;
}
updateCalcUI();
}

private void updateCalcUI() {


tvNumber.setText(calculator.numberString);
tvDetails.setText(calculator.detailsString);
}

public void clearClicked(View view) {


calculator.clearClicked();
updateCalcUI();
}

public void memPlusClicked(View view) {


calculator.memPlusClicked();
updateCalcUI();
}
public void memMinusClicked(View view) {
calculator.memMinusClicked();
updateCalcUI();
}
public void memRecallClicked(View view) {
calculator.memRecallClicked();
updateCalcUI();
}

public void memClearClicked(View view) {


calculator.memClearClicked();
updateCalcUI();
}
public void radixPointClicked(View view) {
calculator.radixPointClicked();
updateCalcUI();
}
public void perctClicked(View view) {
calculator.perctClicked();
updateCalcUI();
}
public void additionClicked(View view) {
calculator.additionClicked();
updateCalcUI();
}
public void subtractionClicked(View view) {
calculator.subtractionClicked();
updateCalcUI();
}
public void multiplicationClicked(View view) {
calculator.multiplicationClicked();
updateCalcUI();
}
public void divideClicked(View view) {
calculator.divisionClicked();
updateCalcUI();
}
public void pieClicked(View view) {
calculator.pieClicked();
updateCalcUI();
}
public void equalClicked(View view) {
calculator.equalsClicked();
updateCalcUI();
}
public void expClicked(View view) {
calculator.expClicked();
updateCalcUI();
}

}
MainActivity.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:id="@+id/tv_details"
android:layout_width="match_parent"
android:layout_height="0dp"
android:hint="Ans:0"
android:layout_margin="8dp"
android:textSize="24dp"
android:gravity="center_vertical|start"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/v_10pc_vertical"
/>

<FrameLayout
android:id="@+id/v_10pc_vertical"
android:layout_width="match_parent"
android:layout_height="1dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.1"
/>

<TextView
android:id="@+id/tv_number"
android:layout_width="match_parent"
android:layout_height="0dp"
android:text="0"
android:textSize="48dp"
android:gravity="center_vertical|end"
android:layout_margin="8dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/v_10pc_vertical"
app:layout_constraintBottom_toTopOf="@id/v_quarter_vertical"
/>

<FrameLayout
android:id="@+id/v_quarter_vertical"
android:layout_width="match_parent"
android:layout_height="1dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.25"
/>

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_memory_buttons"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/cl_operations_buttons"
android:background="#888"
app:layout_constraintTop_toBottomOf="@id/v_quarter_vertical"
>
<Button
android:id="@+id/b_m_plus"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/b_m_minus"
android:text="M+"
android:onClick="memPlusClicked"
style="@style/style_calc_button.darker_bg" />
<Button
android:id="@+id/b_m_minus"
style="@style/style_calc_button.darker_bg"
app:layout_constraintTop_toTopOf="parent"
android:layout_margin="1dp"
android:onClick="memMinusClicked"
app:layout_constraintLeft_toRightOf="@id/b_m_plus"
app:layout_constraintRight_toLeftOf="@id/b_m_r"
android:text="M-"
/>
<Button
android:id="@+id/b_m_r"
style="@style/style_calc_button.darker_bg"
app:layout_constraintTop_toTopOf="parent"
android:onClick="memRecallClicked"
app:layout_constraintLeft_toRightOf="@id/b_m_minus"
app:layout_constraintRight_toLeftOf="@id/b_m_c"
android:text="MR"
/>
<Button
android:id="@+id/b_m_c"
style="@style/style_calc_button.darker_bg"
android:onClick="memClearClicked"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/b_m_r"
app:layout_constraintRight_toRightOf="parent"
android:text="MC"
/>

</androidx.constraintlayout.widget.ConstraintLayout>

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_operations_buttons"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/cl_789"
android:background="#888"
app:layout_constraintTop_toBottomOf="@id/cl_memory_buttons"
>
<Button
android:id="@+id/b_clear"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/b_e_to_x"
android:text="C"
android:onClick="clearClicked"
style="@style/style_calc_button.darker_bg"
/>
<Button
android:id="@+id/b_e_to_x"
style="@style/style_calc_button.darker_bg"
app:layout_constraintTop_toTopOf="parent"
android:layout_margin="1dp"
android:onClick="expClicked"
app:layout_constraintLeft_toRightOf="@id/b_clear"
app:layout_constraintRight_toLeftOf="@id/b_pi"
android:textAllCaps="false"
android:text="eˣ"
/>
<Button
android:id="@+id/b_pi"
style="@style/style_calc_button.darker_bg"
app:layout_constraintTop_toTopOf="parent"
android:onClick="pieClicked"
app:layout_constraintLeft_toRightOf="@id/b_e_to_x"
app:layout_constraintRight_toLeftOf="@id/b_div"
android:text="𝜋"
/>
<Button
android:id="@+id/b_div"
style="@style/style_calc_button.orangebg"
android:onClick="divideClicked"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/b_pi"
app:layout_constraintRight_toRightOf="parent"
android:text=" ÷ "
/>

</androidx.constraintlayout.widget.ConstraintLayout>

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_789"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/cl_456"
android:background="#888"
app:layout_constraintTop_toBottomOf="@id/cl_operations_buttons"
>
<Button
android:id="@+id/b_7"
android:onClick="numberClicked"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/b_8"
android:text="7"
style="@style/style_calc_button"
/>
<Button
android:id="@+id/b_8"
android:onClick="numberClicked"
style="@style/style_calc_button"
app:layout_constraintTop_toTopOf="parent"
android:layout_margin="1dp"
app:layout_constraintLeft_toRightOf="@id/b_7"
app:layout_constraintRight_toLeftOf="@id/b_9"
android:text="8"
/>
<Button
android:id="@+id/b_9"
android:onClick="numberClicked"
style="@style/style_calc_button"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/b_8"
app:layout_constraintRight_toLeftOf="@id/b_multiply"
android:text="9"
/>
<Button
android:id="@+id/b_multiply"
style="@style/style_calc_button.orangebg"
android:onClick="multiplicationClicked"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/b_9"
app:layout_constraintRight_toRightOf="parent"
android:text="×"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_456"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/cl_123"
android:background="#888"
app:layout_constraintTop_toBottomOf="@id/cl_789"
>
<Button
android:id="@+id/b_4"
android:onClick="numberClicked"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/b_5"
android:text="4"
style="@style/style_calc_button"
/>
<Button
android:id="@+id/b_5"
style="@style/style_calc_button"
android:onClick="numberClicked"
app:layout_constraintTop_toTopOf="parent"
android:layout_margin="1dp"
app:layout_constraintLeft_toRightOf="@id/b_4"
app:layout_constraintRight_toLeftOf="@id/b_6"
android:text="5"
/>
<Button
android:id="@+id/b_6"
style="@style/style_calc_button"
android:onClick="numberClicked"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/b_5"
app:layout_constraintRight_toLeftOf="@id/b_subtract"
android:text="6"
/>
<Button
android:id="@+id/b_subtract"
style="@style/style_calc_button.orangebg"
android:onClick="subtractionClicked"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/b_6"
app:layout_constraintRight_toRightOf="parent"
android:text="-"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_123"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/cl_0_equal"
android:background="#888"
app:layout_constraintTop_toBottomOf="@id/cl_456"
>
<Button
android:id="@+id/b_1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/b_2"
android:text="1"
android:onClick="numberClicked"
style="@style/style_calc_button"
/>
<Button
android:id="@+id/b_2"
style="@style/style_calc_button"
app:layout_constraintTop_toTopOf="parent"
android:layout_margin="1dp"
android:onClick="numberClicked"
app:layout_constraintLeft_toRightOf="@id/b_1"
app:layout_constraintRight_toLeftOf="@id/b_3"
android:text="2"
/>
<Button
android:id="@+id/b_3"
style="@style/style_calc_button"
android:onClick="numberClicked"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/b_2"
app:layout_constraintRight_toLeftOf="@id/b_addition"
android:text="3"
/>
<Button
android:id="@+id/b_addition"
style="@style/style_calc_button.orangebg"
app:layout_constraintTop_toTopOf="parent"
android:onClick="additionClicked"
app:layout_constraintLeft_toRightOf="@id/b_3"
app:layout_constraintRight_toRightOf="parent"
android:text="\u002b"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_0_equal"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
android:background="#888"
app:layout_constraintTop_toBottomOf="@id/cl_123"
>
<Button
android:id="@+id/b_0"
android:onClick="numberClicked"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/b_perct"
android:text="0"
style="@style/style_calc_button"
/>
<Button
android:id="@+id/b_perct"
style="@style/style_calc_button"
android:onClick="perctClicked"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/b_0"
app:layout_constraintRight_toLeftOf="@id/b_radix_point"
android:text="%"
/>
<Button
android:id="@+id/b_radix_point"
style="@style/style_calc_button"
app:layout_constraintTop_toTopOf="parent"
android:onClick="radixPointClicked"
app:layout_constraintLeft_toRightOf="@id/v_center_horizontal"
app:layout_constraintRight_toLeftOf="@id/b_equal"
android:text="."
/>

<Button
android:id="@+id/b_equal"
style="@style/style_calc_button.orangebg"
app:layout_constraintTop_toTopOf="parent"
android:onClick="equalClicked"
app:layout_constraintLeft_toRightOf="@id/b_radix_point"
app:layout_constraintRight_toRightOf="parent"
android:text="="
/>
<FrameLayout
android:id="@+id/v_center_horizontal"
android:layout_width="1dp"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

You might also like