Step 1 main.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"
android:background="@drawable/background1"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/logo"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:src="@drawable/logo"/>
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/animation_view"
android:layout_width="80dp"
android:layout_height="80dp"
app:lottie_fileName="loading.json"
app:lottie_loop="true"
app:lottie_autoPlay="true"
android:layout_gravity="center"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"/>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Step 2 main.java
package in.learncodewithrk.scientificcalculator;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
public class MainActivity extends AppCompatActivity {
private static int SPLASH_TIME_OUT =2000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
Intent homeIntent = new Intent(MainActivity.this, scientific_cal_page.class);
startActivity(homeIntent);
finish();
}
},SPLASH_TIME_OUT);
}
}
Step 3 scientific_cal_page.xml
package in.learncodewithrk.scientificcalculator;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class scientific_cal_page extends AppCompatActivity {
Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bdot,bpi,bequal,bplus,bmin,bmul,bdiv,binv,bsqrt,bsquare,bfact,bln,blog,btan,bcos,bsin,bb1,bb2,bc,bac;
TextView tvmain,tvsec;
String pi = "3.14159265";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scientific_cal_page);
b1 = findViewById(R.id.b1);
b2 = findViewById(R.id.b2);
b3 = findViewById(R.id.b3);
b4 = findViewById(R.id.b4);
b5 = findViewById(R.id.b5);
b6 = findViewById(R.id.b6);
b7 = findViewById(R.id.b7);
b8 = findViewById(R.id.b8);
b9 = findViewById(R.id.b9);
b0 = findViewById(R.id.b0);
bpi = findViewById(R.id.bpi);
bdot = findViewById(R.id.bdot);
bequal = findViewById(R.id.bequal);
bplus = findViewById(R.id.bplus);
bmin = findViewById(R.id.bmin);
bmul = findViewById(R.id.bmul);
bdiv = findViewById(R.id.bdiv);
binv = findViewById(R.id.binv);
bsqrt = findViewById(R.id.bsqrt);
bsquare = findViewById(R.id.bsquare);
bfact = findViewById(R.id.bfact);
bln = findViewById(R.id.bln);
blog = findViewById(R.id.blog);
btan = findViewById(R.id.btan);
bsin = findViewById(R.id.bsin);
bcos = findViewById(R.id.bcos);
bb1 = findViewById(R.id.bb1);
bb2 = findViewById(R.id.bb2);
bc = findViewById(R.id.bc);
bac = findViewById(R.id.bac);
tvmain = findViewById(R.id.tvmain);
tvsec = findViewById(R.id.tvsec);
//onclick listeners
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"1");
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"2");
}
});
b3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"3");
}
});
b4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"4");
}
});
b5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"5");
}
});
b6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"6");
}
});
b7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"7");
}
});
b8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"8");
}
});
b9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"9");
}
});
b0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"0");
}
});
bdot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+".");
}
});
bac.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText("");
tvsec.setText("");
}
});
bc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String val = tvmain.getText().toString();
val = val.substring(0, val.length() - 1);
tvmain.setText(val);
}
});
bplus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"+");
}
});
bmin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"-");
}
});
bmul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"×");
}
});
bdiv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"÷");
}
});
bsqrt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String val = tvmain.getText().toString();
double r = Math.sqrt(Double.parseDouble(val));
tvmain.setText(String.valueOf(r));
}
});
bb1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"(");
}
});
bb2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+")");
}
});
bpi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvsec.setText(bpi.getText());
tvmain.setText(tvmain.getText()+pi);
}
});
bsin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"sin");
}
});
bcos.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"cos");
}
});
btan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"tan");
}
});
binv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"^"+"(-1)");
}
});
bfact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int val = Integer.parseInt(tvmain.getText().toString());
int fact = factorial(val);
tvmain.setText(String.valueOf(fact));
tvsec.setText(val+"!");
}
});
bsquare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double d = Double.parseDouble(tvmain.getText().toString());
double square = d*d;
tvmain.setText(String.valueOf(square));
tvsec.setText(d+"²");
}
});
bln.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"ln");
}
});
blog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tvmain.setText(tvmain.getText()+"log");
}
});
bequal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String val = tvmain.getText().toString();
String replacedstr = val.replace('÷','/').replace('×','*');
double result = eval(replacedstr);
tvmain.setText(String.valueOf(result));
tvsec.setText(val);
}
});
}
//factorial function
int factorial(int n)
{
return (n==1 || n==0) ? 1 : n*factorial(n-1);
}
//eval function
public static double eval(final String str) {
return new Object() {
int pos = -1, ch;
void nextChar() {
ch = (++pos < str.length()) ? str.charAt(pos) : -1;
}
boolean eat(int charToEat) {
while (ch == ' ') nextChar();
if (ch == charToEat) {
nextChar();
return true;
}
return false;
}
double parse() {
nextChar();
double x = parseExpression();
if (pos < str.length()) throw new RuntimeException("Unexpected: " + (char)ch);
return x;
}
// Grammar:
// expression = term | expression `+` term | expression `-` term
// term = factor | term `*` factor | term `/` factor
// factor = `+` factor | `-` factor | `(` expression `)`
// | number | functionName factor | factor `^` factor
double parseExpression() {
double x = parseTerm();
for (;;) {
if (eat('+')) x += parseTerm(); // addition
else if (eat('-')) x -= parseTerm(); // subtraction
else return x;
}
}
double parseTerm() {
double x = parseFactor();
for (;;) {
if (eat('*')) x *= parseFactor(); // multiplication
else if (eat('/')) x /= parseFactor(); // division
else return x;
}
}
double parseFactor() {
if (eat('+')) return parseFactor(); // unary plus
if (eat('-')) return -parseFactor(); // unary minus
double x;
int startPos = this.pos;
if (eat('(')) { // parentheses
x = parseExpression();
eat(')');
} else if ((ch >= '0' && ch <= '9') || ch == '.') { // numbers
while ((ch >= '0' && ch <= '9') || ch == '.') nextChar();
x = Double.parseDouble(str.substring(startPos, this.pos));
} else if (ch >= 'a' && ch <= 'z') { // functions
while (ch >= 'a' && ch <= 'z') nextChar();
String func = str.substring(startPos, this.pos);
x = parseFactor();
if (func.equals("sqrt")) x = Math.sqrt(x);
else if (func.equals("sin")) x = Math.sin(Math.toRadians(x));
else if (func.equals("cos")) x = Math.cos(Math.toRadians(x));
else if (func.equals("tan")) x = Math.tan(Math.toRadians(x));
else if (func.equals("log")) x = Math.log10(x);
else if (func.equals("ln")) x = Math.log(x);
else throw new RuntimeException("Unknown function: " + func);
} else {
throw new RuntimeException("Unexpected: " + (char)ch);
}
if (eat('^')) x = Math.pow(x, parseFactor()); // exponentiation
return x;
}
}.parse();
}
}
GITHUB : https://github.com/LearncodeWithRk/-Scientific-calculator
0 Comments