# Android learning case - calculator

Keywords: Android Java calculator REST

The last article talked about the six basic layouts of android: https://blog.csdn.net/qq_40205116/article/details/88418781

This article uses layout to make an android small project (calculator). The effect is as follows (those who wanted to insert video, but found that they couldn't insert video, could only insert pictures. Here% means taking the rest):

Analysis: the main subgrade thinking is the priority of the four operations of addition, subtraction, multiplication and division. It's not difficult to solve this problem. You can convert the equation into a character array first, and then convert it into a character set (number and operator), and then calculate it. When calculating, the subscript of the first number string is 0, and only to judge whether the second string operator is multiplication, division or redundancy.

1. If this is the case, then put the result in the set with subscript 0 and delete the next two elements

2. If not, judge whether the operator with subscript 3 is multiplication, division or redundancy. If yes, you can operate. If no, you can operate on the previous group.

To push, if you don't understand it, then look at the code (expression ability is not very good O(∩) O haha ~)!

Code part:

In activity main.xml:

```<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/TableLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="*" >

<!-- Displayed text -->
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="@android:color/holo_blue_bright"
android:textSize="20dp"
android:gravity="center|right"
android:text="" />

<!--
android:onClick="fun"Set click event
android:tag="%"Click to get the text value
-->
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" >
<Button
android:id="@+id/btn01"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="C" />
<Button
android:id="@+id/btn02"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="←" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="%"
android:text="%" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="÷"
android:text="÷" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" >
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="7"
android:text="7" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="8"
android:text="8" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="9"
android:text="9" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="x"
android:text="x" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" >
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="4"
android:text="4" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="5"
android:text="5" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="6"
android:text="6" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="-"
android:text="-" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" >
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="1"
android:text="1" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="2"
android:text="2" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="3"
android:text="3" />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="+"
android:text="+" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" >
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="."
android:text="." />
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:onClick="fun"
android:tag="0"
android:text="0" />
<Button
android:id="@+id/btn19"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_span="2"
android:text="=" />
</TableRow>
</TableLayout>
```

MainActivity.java class:

```package com.example.tablelayoutjsq;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
private TextView text;
private Button btn01;
private Button btn02;
private Button btn19;
String str;		//Text value
String str1 = "";	//Addition, subtraction, multiplication and division equation
private OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
String s = "";
switch (v.getId()) {
case R.id.btn01:	//empty
text.setText("");
str1 = "";
break;
case R.id.btn02:	//Regression
if(text.getText().toString().length() > 0){
s = text.getText().toString().substring(0, text.getText().toString().length()-1);
text.setText(s);
}
break;
case R.id.btn19:	//Click = sign calculation result
str = text.getText().toString();
if(str.equals("")){
return ;
}
char[] array = str.toCharArray();
List<String> list = new ArrayList<String>();
for(int i = str1.length(); i < array.length; i++){
if(array[i] == '%' || array[i] == '÷' || array[i] == 'x' || array[i] == '-' || array[i] == '+'){
if(!s.equals("")){
s = "";
}
String a = array[i]+"";
}else{
s += array[i];
if(i == array.length-1){
s = "";
}
}
}
while(true){
String b = list.get(list.size()-1);
if(b.equals("%") || b.equals("÷") || b.equals("x") || b.equals("+") || b.equals("-"))
list.remove(list.size()-1);
if(list.size() == 1){
str1 = text.getText().toString()+"\n";
text.setText(str1+list.get(0));
break;
}
if(list.size() == 3){
fun(0, list);
}else{
if("%".equals(list.get(3)) || "÷".equals(list.get(3)) || "x".equals(list.get(3))){
fun(2, list);
}else{
fun(0, list);
}
}
}
default:
break;
}
}
private void fun(int i, List<String> list) {
double x = Double.parseDouble(list.get(i));
String y = list.get(i+1);
double z = Double.parseDouble(list.get(i+2));
String sum;
if(y.equals("%")){
sum = x % z+"";
}else if(y.equals("÷")){
sum = x / z+"";
}else if(y.equals("+")){
sum = x + z+"";
}else if(y.equals("-")){
sum = x - z+"";
}else{
sum = x * z+"";
}
list.set(i, sum);
list.remove(i+2);
list.remove(i+1);
}
};
//Click the button to display the button value on the text
public void fun(View v){
str = text.getText().toString();
if(str.length() > 0){
char c = str.charAt(str.length()-1);
String ss = (String) v.getTag();
if((c == '%' || c == '÷' || c == 'x' || c == '+' || c == '-') && (ss.equals("%") || ss.equals("÷") || ss.equals("x") || ss.equals("+") || ss.equals("-"))){
str = str.substring(0, str.length()-1)+ss;
text.setText(str);
}else{
text.append((String)v.getTag());
}
}else{
text.append((String)v.getTag());	//append concatenates a string
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (TextView) findViewById(R.id.text);
btn01 = (Button) findViewById(R.id.btn01);
btn02 = (Button) findViewById(R.id.btn02);
btn19 = (Button) findViewById(R.id.btn19);
btn01.setOnClickListener(listener);
btn02.setOnClickListener(listener);
btn19.setOnClickListener(listener);
}
}
```

Posted by russia5 on Mon, 02 Dec 2019 14:32:31 -0800