package com.yh.study01;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView display;
TextView resultTextView;
String result = "";
String conn = "";
String firstNum = "";
String secondNum = "";
String oper = "";
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
display = findViewById(R.id.display);
resultTextView = findViewById(R.id.result);
findViewById(R.id.clear).setOnClickListener(this);
findViewById(R.id.neg).setOnClickListener(this);
findViewById(R.id.mod).setOnClickListener(this);
findViewById(R.id.div).setOnClickListener(this);
findViewById(R.id.bt7).setOnClickListener(this);
findViewById(R.id.bt8).setOnClickListener(this);
findViewById(R.id.bt9).setOnClickListener(this);
findViewById(R.id.mul).setOnClickListener(this);
findViewById(R.id.bt4).setOnClickListener(this);
findViewById(R.id.bt5).setOnClickListener(this);
findViewById(R.id.bt6).setOnClickListener(this);
findViewById(R.id.sub).setOnClickListener(this);
findViewById(R.id.bt1).setOnClickListener(this);
findViewById(R.id.bt2).setOnClickListener(this);
findViewById(R.id.bt3).setOnClickListener(this);
findViewById(R.id.add).setOnClickListener(this);
findViewById(R.id.bt0).setOnClickListener(this);
findViewById(R.id.pon).setOnClickListener(this);
findViewById(R.id.equ).setOnClickListener(this);
}
public Double sum(String number1, String s, String number2) {
Double num1 = (number1.isEmpty() || number1.equals(".") || number1.equals("-")) ? 0.0 : Double.valueOf(number1);
Double num2 = (number2.isEmpty() || number2.equals(".") || number2.equals("-")) ? 0.0 : Double.valueOf(number2);
switch (s) {
case "+":
oper = "+";
return num1 + num2;
case "-":
oper = "-";
return num1 - num2;
case "X":
oper = "X";
return num1 * num2;
case "÷":
oper = "÷";
return num1 / num2;
}
return 0.0;
}
@Override
public void onClick(View view) {
String s = ((Button) view).getText().toString();
switch (view.getId()) {
case R.id.mod:
if (!firstNum.isEmpty() ) {
double calculatedResult = sum(firstNum, "÷", "100");
resultTextView.setText("="+calculatedResult);
firstNum = ""+calculatedResult;
result+="%";
secondNum="";
show(result);
}
break;
case R.id.neg:
if (!firstNum.isEmpty() ) {
double calculatedResult = sum("1", "÷", firstNum);
resultTextView.setText("="+calculatedResult);
firstNum = ""+calculatedResult;
secondNum="";
}
case R.id.add:
case R.id.sub:
case R.id.mul:
case R.id.div:
char lastChar = result.isEmpty() ? '\0' : result.charAt(result.length() - 1);
if (lastChar == 'X' || lastChar == '÷' || lastChar == '+' || lastChar == '-' || lastChar == '%') {
result = result.substring(0, result.length() - 1) + s;
oper = s;
} else {
oper = s;
result += s;
}
show(result);
break;
case R.id.clear:
clear();
break;
case R.id.equ:
if (!firstNum.isEmpty() && !secondNum.isEmpty()) {
double calculatedResult = sum(firstNum, oper, secondNum);
resultTextView.setText("="+calculatedResult);
firstNum = ""+calculatedResult;
result=firstNum;
secondNum="";
oper="";
}
break;
default:
if (oper.isEmpty()) {
firstNum += s;
} else {
secondNum += s;
}
result += s;
show(result);
break;
}
}
public void show(String s) {
display.setText(s);
}
public void clear() {
try {
firstNum = "";
secondNum = "";
result = "";
oper = "";
display.setText("");
resultTextView.setText("");
} catch (Exception e) {
e.printStackTrace();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="wrap_content"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:textSize="30dp"
android:id="@+id/display"/>
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:textSize="30dp"
android:id="@+id/result"/>
<GridLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:rowCount="5"
android:columnCount="4">
<Button android:text="AC" android:id="@+id/clear"/>
<Button android:text="1/X" android:id="@+id/neg"/>
<Button android:text="%" android:id="@+id/mod"/>
<Button android:text="÷" android:id="@+id/div"/>
<Button android:text="7" android:id="@+id/bt7"/>
<Button android:text="8" android:id="@+id/bt8"/>
<Button android:text="9" android:id="@+id/bt9"/>
<Button android:text="X" android:id="@+id/mul"/>
<Button android:text="4" android:id="@+id/bt4"/>
<Button android:text="5" android:id="@+id/bt5"/>
<Button android:text="6" android:id="@+id/bt6"/>
<Button android:text="-" android:id="@+id/sub"/>
<Button android:text="1" android:id="@+id/bt1"/>
<Button android:text="2" android:id="@+id/bt2"/>
<Button android:text="3" android:id="@+id/bt3"/>
<Button android:text="+" android:id="@+id/add"/>
<Button android:text="0" android:layout_columnSpan="2" android:layout_gravity="fill" android:id="@+id/bt0"/>
<Button android:text="." android:id="@+id/pon"/>
<Button android:text="=" android:id="@+id/equ"/>
</GridLayout>
</LinearLayout>