From 47977e39d93503123ac9145d5fbcc2ad24fca42d Mon Sep 17 00:00:00 2001 From: ahmesajid Date: Sun, 15 Mar 2020 19:16:48 +0500 Subject: [PATCH] Assignment completed! --- .idea/caches/build_file_checksums.ser | Bin 540 -> 536 bytes .idea/caches/gradle_models.ser | Bin 73122 -> 75475 bytes .idea/modules.xml | 2 +- .idea/vcs.xml | 2 +- app/build.gradle | 1 + .../pk/edu/pucit/calculator/MainActivity.java | 246 ++++++++++++++++++ app/src/main/res/layout/activity_main.xml | 130 +++++---- app/src/main/res/values/strings.xml | 3 + 8 files changed, 337 insertions(+), 47 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 38528ca9bec94b578b114c0ef11e54cb33239c5e..21b38f1a7a0258e747324eeb8c17167debceff4b 100644 GIT binary patch delta 155 zcmV;M0A&B11egSnm;~MjvS*Q;cRZWjl$I_6mIKpNe2#$ZQ2%rQ4|8R7bZKs9b1r9c zVPtG&b#VZG00sa601%$pV7@%x2W~B3E*e)t!=aN;0T~cNi@376%A_lZ8ro!c1T$2V zcmW+CNz5xx-oz;sV&eM_}y JiE)9VQg{{pKUDw# delta 159 zcmV;Q0AT-^1e^qrm;|63U$>E*cRb@@W&q}x8eQA6%ZjPFu6Q>2Ml1jT diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index 74b2d320520c2994b820ece77fbc047e27892300..515bd8742666b35bd5894d1a58bb687a4bfbb662 100644 GIT binary patch literal 75475 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 a}6|=T5Hs`sR5#kV)UC~bV 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 diff --git a/.idea/modules.xml b/.idea/modules.xml index dcdca1a..15cde93 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 8352c69..5fed966 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,5 +20,6 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'net.objecthunter:exp4j:0.4.4' implementation 'com.android.support.constraint:constraint-layout:1.0.2' } diff --git a/app/src/main/java/pk/edu/pucit/calculator/MainActivity.java b/app/src/main/java/pk/edu/pucit/calculator/MainActivity.java index cbc2626..c7a8725 100644 --- a/app/src/main/java/pk/edu/pucit/calculator/MainActivity.java +++ b/app/src/main/java/pk/edu/pucit/calculator/MainActivity.java @@ -2,12 +2,258 @@ import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import net.objecthunter.exp4j.Expression; +import net.objecthunter.exp4j.ExpressionBuilder; + public class MainActivity extends AppCompatActivity { + + TextView res,eq; + Button one,two,three,four,five,six,seven,eight,nine,zero,doubleZero,ac,del,add,sub,mul,div,mod,fract,equal; + private final char ADDITION='+'; + private final char SUBTRACTION='-'; + private final char MULTIPLICATION='*'; + private final char FRACTION='.'; + private final char MODE='%'; + private final char DIVIDE='/'; + private double num1 = Double.NaN; + private double num2; + String s; + Expression expression; + @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + setupVariables(); + + + //SETTING ONCLICK LISTENERS + one.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "1"); + } + }); + two.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "2"); + } + }); + three.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "3"); + } + }); + four.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "4"); + } + }); + five.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "5"); + } + }); + six.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "6"); + } + }); + seven.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "7"); + } + }); + eight.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "8"); + } + }); + nine.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "9"); + } + }); + zero.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "0"); + } + }); + doubleZero.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(eq.getText().toString() + "00"); + } + }); + ac.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + eq.setText(""); + res.setText(""); + } + }); + del.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + + } + }); + add.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(!eq.getText().toString().endsWith("+")) + { + eq.setText(eq.getText().toString()+ADDITION); + } + } + }); + sub.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(!eq.getText().toString().endsWith("-")) + { + eq.setText(eq.getText().toString()+SUBTRACTION); + } + } + }); + mul.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(!eq.getText().toString().endsWith("*")) + { + eq.setText(eq.getText().toString()+MULTIPLICATION); + } + } + }); + div.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(!eq.getText().toString().endsWith("/")) + { + eq.setText(eq.getText().toString()+DIVIDE); + } + } + }); + fract.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String testStr = eq.getText().toString(); + int numOfDecimals = 0; + + for(int i = testStr.length()-1;i>=0;i--) + { + if(isOperator(testStr.charAt(i))) + { + i=0; + } + else if(testStr.charAt(i)=='.') + { + numOfDecimals++; + } + if(numOfDecimals>1) + i=0; + } + + + if(!eq.getText().toString().endsWith(".") && !eq.getText().toString().endsWith("+") && + !eq.getText().toString().endsWith("-") && !eq.getText().toString().endsWith("*") && + !eq.getText().toString().endsWith("/") && !eq.getText().toString().endsWith("%") && + numOfDecimals<1 ) + { + eq.setText(eq.getText().toString()+FRACTION); + } + } + }); + mod.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(!eq.getText().toString().endsWith("%")) + { + eq.setText(eq.getText().toString()+MODE); + } + } + }); + equal.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String testStr = ""; + while(eq.getText().toString().endsWith("+") || eq.getText().toString().endsWith("-")|| eq.getText().toString().endsWith("*") || eq.getText().toString().endsWith("/") || eq.getText().toString().endsWith("%")) + { + testStr = eq.getText().toString(); + testStr = testStr.substring(0,testStr.length()-1); + eq.setText(testStr); + } + if(!eq.getText().toString().equals("")) + { + expression = new ExpressionBuilder(eq.getText().toString()).build(); + try { + // Calculate the result and display + double result = expression.evaluate(); + res.setText(Double.toString(result)); + } catch (ArithmeticException ex) { + // Display an error message + res.setText("Error"); + } + } + + + + } + }); + + } + private Boolean isOperator(char ch) + { + if(ch=='+' || ch=='-' || ch=='*' || ch=='/' || ch=='%') + { + return true; + } + return false; + } + private void setupVariables() + { + //RESULTS + res =(TextView) findViewById(R.id.tv_result); + eq = (TextView) findViewById(R.id.tv_equation); + + //NUMERICS + one = (Button) findViewById(R.id.one); + two = (Button) findViewById(R.id.two); + three = (Button) findViewById(R.id.three); + four = (Button) findViewById(R.id.four); + five = (Button) findViewById(R.id.five); + six = (Button) findViewById(R.id.six); + seven = (Button) findViewById(R.id.seven); + eight = (Button) findViewById(R.id.eight); + nine = (Button) findViewById(R.id.nine); + zero = (Button) findViewById(R.id.zero); + doubleZero = (Button) findViewById(R.id.doublezero); + + //OPERATIONS + add = (Button) findViewById(R.id.sum); + sub = (Button) findViewById(R.id.subtract); + mul = (Button) findViewById(R.id.multiply); + div = (Button) findViewById(R.id.divide); + mod = (Button) findViewById(R.id.mod); + ac = (Button) findViewById(R.id.ac); + del = (Button) findViewById(R.id.del); + fract = (Button) findViewById(R.id.decimal); + equal = (Button) findViewById(R.id.equal); } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index da939a0..2f1152f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -13,7 +13,6 @@ android:layout_width="match_parent" android:layout_height="150dp" android:gravity="right|bottom" - android:text="1200*20*60" android:textColor="@color/white" android:textSize="9pt" app:layout_constraintEnd_toEndOf="parent" @@ -25,20 +24,20 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" - android:text="5,760,000" android:textColor="@color/white" android:textSize="18pt" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_equation" /> - + - + android:textSize="10pt" + android:background="@null" + /> - + android:textSize="10pt" + android:background="@null"/> - + android:textSize="10pt" + android:background="@null"/> - + android:textSize="10pt" + android:background="@null"/> @@ -105,7 +113,8 @@ android:layout_weight="1" android:orientation="horizontal"> - + android:textSize="10pt" + android:background="@null"/> - + android:textSize="10pt" + android:background="@null"/> - - +