几天前,我花了一天时间,结合这段时间所学知识开发出了一个简单的计算器,它由两个TextView和23个Button组成,代码会放在文章结尾。

TextView

TextView:上面一个TextView的功能是记录运算过程,其中运算符的显示顺序是输入顺序也是运算顺序/*即1+2×3为(1+2)×3*/,

下面一个TextView功能是显示运算结果和显示输入的运算数据。

Button

AC键:功能是清除运算记录,将所有变量重置。

BC键:功能是返回上一步运算结果,在每一步运算结束后,会将这一步的运算结果存储在ArrayList中,BC之后会将Arraylist中最近一次的运算记录也就是返回的这步运算记录删除,以实现随意回调的效果。

+/-键:功能是将现在输入框中的数据转为它的相反数

DEL键:功能是退格,在输入数据不是小数时,退格的实现方式是输入框中数据除十得到结果,在输入数据是小数时退格的实现方式是获取输入框中的字符串减去末尾数字字符得到结果。

0~9数字键:进行数字键输入操作时,会对当前是否正在输入小数进行判断,如果是,则这样将

double num = 1;
pointnum++;//小数点后输入的位数
for (int i = 0; i < pointnum; i++)
    num /= 10;
init += key* num;//当前key的值*位数

的确是繁琐!

推荐第二种做法直接将key拼接到输入框字符串的尾部即可!

四则运算键:在四则运算前都会对前一个输入是否为其他四则运算符进行判断。如果是,则将前一个四则运算符替换为当前的。进行每一个运算符在被点击之后都会储存起来,在下一个运算符或等于键被点击时(即下一个需要运算的数据输入完毕时)进行运算,并将此时被点击的运算符存储起来以供下次运算使用。

%键:进行求余运算,与四则运算类似。

x²键:对当前输入框中的数据进行平方操作。

√x键:对当前输入框中的数据进行开平方操作。

小数点键:将当前输入状态设置为小数输入。

关于这个程序的反省:

*在这个程序中我对输入框中的输入等操作大多是以double数据的运算实现的,在写完之后我突然意识到其实输入等很多功能的实现用字符串操作会省很多功夫,像DEL退格的实现以及小数点的等等操作用字符串进行操作确实会容易很多,不需要做那么多运算,在用的时候直接把字符串转换为所需数据类型即可!

*关于界面布局的看法:

在刚开始写这个程序布局的时候我只用了一个RelativeLayout就写了下来,在虚拟机上看起来布局很好,但放到其他型号的手机里布局就不行了,今天我对它的布局做了优化,用的是一个大的LinearLayout里面框住两个文本框和一个小的LinearLayout框住五个更小的LinearLayout,然后为他们各自设置match_parent和layout_weight,五个更小的LinearLayout每个各占match_parent/5,在更小的的LinearLayout里为里面的键设置layoutweight,避免了直接使用dp等数字,保证它可以占满整个屏幕或者确定的那一部分,使之在其他机型上也能美观地展示。

activity_calculator.xml

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.Appalication_Trial.Calculator"> <TextView
android:id="@+id/tv_cord"
android:layout_width="match_parent"
android:layout_height="99dp"
android:background="@drawable/riple_btn_pink"
android:gravity="right"
android:textSize="30dp"></TextView> <TextView
android:id="@+id/tv_calcul"
android:layout_width="match_parent"
android:layout_height="99dp"
android:layout_below="@+id/tv_cord"
android:background="@drawable/riple_btn_pink"
android:gravity="right"
android:textSize="30dp"></TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tv_calcul"
android:orientation="vertical"
android:gravity="center">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
><Button
android:id="@+id/calcul_btn_ac"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:background="@drawable/riple_btn_nocorner"
android:fontFamily="宋体"
android:text="AC"
android:textSize="40dp"
android:layout_weight="1"
android:textColor="#169FDF"
></Button>
<Button
android:id="@+id/calcul_btn_back"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:layout_toRightOf="@id/calcul_btn_ac"
android:background="@drawable/riple_btn_nocorner"
android:fontFamily="宋体"
android:text="bc"
android:textColor="#169FDF"
android:layout_weight="1"
android:textSize="40dp"></Button>
<Button
android:id="@+id/calcul_btn_neg"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:background="@drawable/riple_btn_nocorner"
android:text="+/-"
android:textSize="40dp"
android:textColor="#169FDF"
android:layout_weight="1"
android:fontFamily="宋体"></Button>
<Button
android:id="@+id/calcul_btn_del"
android:layout_width="140dp"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:background="@drawable/riple_btn_nocorner"
android:text="del"
android:textSize="30dp"
android:textColor="#169FDF"
android:layout_weight="2"
android:fontFamily="宋体"></Button> </LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="0dp"
android:orientation="horizontal"
>
<Button
android:id="@+id/calcul_btn_1"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:background="@drawable/riple_btn_nocorner"
android:fontFamily="宋体"
android:text="1"
android:layout_weight="1"
android:textColor="#169FDF"
android:textSize="40dp"></Button>
<Button
android:id="@+id/calcul_btn_2"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:background="@drawable/riple_btn_nocorner"
android:text="2"
android:layout_weight="1"
android:textSize="40dp"
android:textColor="#169FDF"
android:fontFamily="宋体"></Button>
<Button
android:id="@+id/calcul_btn_3"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:background="@drawable/riple_btn_nocorner"
android:text="3"
android:textSize="40dp"
android:textColor="#169FDF"
android:layout_weight="1"
android:fontFamily="宋体"></Button>
<Button
android:id="@+id/calcul_btn_pf"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_below="@id/calcul_btn_back"
android:layout_marginTop="0dp"
android:layout_toRightOf="@id/calcul_btn_9"
android:background="@drawable/riple_btn_nocorner"
android:text="x²"
android:textAllCaps="false"
android:textSize="30dp"
android:textColor="#169FDF"
android:layout_weight="1"
android:fontFamily="宋体"></Button>
<Button
android:id="@+id/calcul_btn_sqrt"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_below="@id/calcul_btn_back"
android:layout_marginTop="0dp"
android:layout_toRightOf="@id/calcul_btn_pf"
android:background="@drawable/riple_btn_nocorner"
android:text="√x"
android:textAllCaps="false"
android:textSize="30dp"
android:textColor="#169FDF"
android:layout_weight="1"
android:fontFamily="宋体"></Button> </LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="0dp"
android:orientation="horizontal"
>
<Button
android:id="@+id/calcul_btn_4"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:background="@drawable/riple_btn_nocorner"
android:text="4"
android:textSize="40dp"
android:layout_weight="1"
android:textColor="#169FDF"
android:fontFamily="宋体"></Button>
<Button
android:id="@+id/calcul_btn_5"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:background="@drawable/riple_btn_nocorner"
android:text="5"
android:textSize="40dp"
android:textColor="#169FDF"
android:layout_weight="1"
android:fontFamily="宋体"></Button>
<Button
android:id="@+id/calcul_btn_6"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:background="@drawable/riple_btn_nocorner"
android:text="6"
android:textSize="40dp"
android:textColor="#169FDF"
android:layout_weight="1"
android:fontFamily="宋体"></Button>
<Button
android:id="@+id/calcul_btn_add"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:background="@drawable/riple_btn_nocorner"
android:text="+"
android:textSize="40dp"
android:textColor="#169FDF"
android:fontFamily="宋体"
android:layout_weight="1"
></Button>
<Button
android:id="@+id/calcul_btn_multiply"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginTop="0dp"
android:background="@drawable/riple_btn_nocorner"
android:text="×"
android:textSize="40dp"
android:textColor="#169FDF"
android:fontFamily="宋体"></Button></LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="0dp"
android:orientation="horizontal"
> <Button
android:id="@+id/calcul_btn_7"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_below="@id/calcul_btn_4"
android:layout_marginTop="0dp"
android:layout_toLeftOf="@id/calcul_btn_5"
android:background="@drawable/riple_btn_nocorner"
android:text="7"
android:textSize="40dp"
android:layout_weight="1"
android:textColor="#169FDF"
android:fontFamily="宋体"></Button>
<Button
android:id="@+id/calcul_btn_8"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_below="@id/calcul_btn_5"
android:layout_marginTop="0dp"
android:layout_toRightOf="@id/calcul_btn_7"
android:background="@drawable/riple_btn_nocorner"
android:text="8"
android:layout_weight="1"
android:textSize="40dp"
android:textColor="#169FDF"
android:fontFamily="宋体"></Button>
<Button
android:id="@+id/calcul_btn_9"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_below="@id/calcul_btn_6"
android:layout_marginTop="0dp"
android:layout_toRightOf="@id/calcul_btn_8"
android:background="@drawable/riple_btn_nocorner"
android:text="9"
android:layout_weight="1"
android:textColor="#169FDF"
android:textSize="40dp"
android:fontFamily="宋体"></Button>
<Button
android:id="@+id/calcul_btn_sub"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:background="@drawable/riple_btn_nocorner"
android:text="-"
android:textSize="40dp"
android:textColor="#169FDF"
android:layout_weight="1"
android:fontFamily="宋体"></Button>
<Button
android:id="@+id/calcul_btn_divide"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_marginTop="0dp"
android:background="@drawable/riple_btn_nocorner"
android:layout_weight="1"
android:text="÷"
android:textSize="40dp"
android:textColor="#169FDF"
android:fontFamily="宋体"></Button>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="0dp"
android:orientation="horizontal"
>
<Button
android:id="@+id/calcul_btn_rem"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_below="@id/calcul_btn_divide"
android:layout_marginTop="0dp"
android:layout_toLeftOf="@id/calcul_btn_0"
android:background="@drawable/riple_btn_nocorner"
android:text="%"
android:layout_weight="1"
android:textSize="40dp"
android:textColor="#169FDF"
android:fontFamily="宋体"></Button>
<Button
android:id="@+id/calcul_btn_0"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_below="@id/calcul_btn_8"
android:layout_marginTop="0dp"
android:layout_toRightOf="@id/calcul_btn_7"
android:background="@drawable/riple_btn_nocorner"
android:text="0"
android:textSize="40dp"
android:layout_weight="1"
android:fontFamily="宋体"
android:textColor="#169FDF"
></Button>
<Button
android:id="@+id/calcul_btn_point"
android:layout_width="70dp"
android:layout_height="match_parent"
android:layout_below="@id/calcul_btn_9"
android:layout_marginTop="0dp"
android:layout_toRightOf="@id/calcul_btn_0"
android:background="@drawable/riple_btn_nocorner"
android:text="."
android:textAllCaps="false"
android:layout_weight="1"
android:textSize="70dp"
android:textColor="#169FDF"
android:fontFamily="宋体"></Button>
<Button
android:id="@+id/calcul_btn_equal"
android:layout_width="140dp"
android:layout_height="match_parent"
android:layout_below="@id/calcul_btn_divide"
android:layout_marginTop="0dp"
android:layout_toRightOf="@id/calcul_btn_neg"
android:background="@drawable/riple_btn_nocorner"
android:text="="
android:textSize="40dp"
android:layout_weight="2"
android:textColor="#169FDF"
android:fontFamily="宋体"></Button>
</LinearLayout>
</LinearLayout>
</RelativeLayout>

Calculater.java

 package com.Appalication_Trial;

 import androidx.appcompat.app.AppCompatActivity;

 import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast; import com.example.myapplication5.R; import java.util.ArrayList; import static java.lang.Math.pow;
import static java.lang.Math.sqrt; public class Calculator extends AppCompatActivity {
private Button btn_0, btn_1, btn_2, btn_3, btn_4, btn_5, btn_6, btn_7, btn_8, btn_9, btn_add,
btn_del, btn_mul, btn_neg, btn_ac, btn_sub, btn_equal, btn_divide, btn_sqrt, btn_rem,
btn_point, btn_pf, btn_back;
private TextView tv_cord, tv_calcul;
private double init = 0;//当前输入数据
private char calcul = '#';//运算符
private double nowsum = 0;//当前运算结果
private int pointnum = 0;//小数点输入次数
boolean isaheadchar = false, isnowpoint = false, isaheadequal = false, isaheadsqr = false;
//isaheadchar: 是否输入过运算符
//isnowpoint:小数点状态
//isaheadequal:前一个运算符是否为=
//isaheadsqr:前一个运算符是否为平方,主要为setText方便而设置
ArrayList<Double> arr = new ArrayList<>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calculator);
btn_0 = findViewById(R.id.calcul_btn_0);
btn_1 = findViewById(R.id.calcul_btn_1);
btn_2 = findViewById(R.id.calcul_btn_2);
btn_3 = findViewById(R.id.calcul_btn_3);
btn_4 = findViewById(R.id.calcul_btn_4);
btn_5 = findViewById(R.id.calcul_btn_5);
btn_6 = findViewById(R.id.calcul_btn_6);
btn_7 = findViewById(R.id.calcul_btn_7);
btn_8 = findViewById(R.id.calcul_btn_8);
btn_9 = findViewById(R.id.calcul_btn_9);
btn_point = findViewById(R.id.calcul_btn_point);
btn_pf = findViewById(R.id.calcul_btn_pf);
btn_back = findViewById(R.id.calcul_btn_back);
btn_sqrt = findViewById(R.id.calcul_btn_sqrt);
btn_sub = findViewById(R.id.calcul_btn_sub);
btn_ac = findViewById(R.id.calcul_btn_ac);
btn_add = findViewById(R.id.calcul_btn_add);
btn_equal = findViewById(R.id.calcul_btn_equal);
btn_del = findViewById(R.id.calcul_btn_del);
btn_divide = findViewById(R.id.calcul_btn_divide);
btn_mul = findViewById(R.id.calcul_btn_multiply);
btn_rem = findViewById(R.id.calcul_btn_rem);
btn_neg = findViewById(R.id.calcul_btn_neg);
tv_calcul = findViewById(R.id.tv_calcul);
tv_cord = findViewById(R.id.tv_cord);
tv_calcul.setText("0");
tv_cord.setText("");
for (int i = 0; i <= 9; i++)
btn_0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isnowpoint)
init = init * 10 + 0;
else {
double num = 1;
pointnum++;
for (int i = 0; i < pointnum; i++)
num /= 10;
init += 0 * num;
}
tv_calcul.setText("" + init);
isaheadequal = false;
isaheadchar = false;
}
});
btn_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isnowpoint)
init = init * 10 + 1;
else {
double num = 1;
pointnum++;
for (int i = 0; i < pointnum; i++)
num /= 10;
init += 1 * num;
}
tv_calcul.setText("" + init);
isaheadequal = false;
isaheadchar = false;
}
});
btn_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isnowpoint)
init = init * 10 + 2;
else {
double num = 1;
pointnum++;
for (int i = 0; i < pointnum; i++)
num /= 10;
init += 2 * num;
}
tv_calcul.setText("" + init);
isaheadequal = false;
isaheadchar = false;
}
});
btn_3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isnowpoint)
init = init * 10 + 3;
else {
double num = 1;
pointnum++;
for (int i = 0; i < pointnum; i++)
num /= 10;
init += 3 * num;
}
tv_calcul.setText("" + init);
isaheadequal = false;
isaheadchar = false;
}
});
btn_4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isnowpoint)
init = init * 10 + 4;
else {
double num = 1;
pointnum++;
for (int i = 0; i < pointnum; i++)
num /= 10;
init += 4 * num;
}
tv_calcul.setText("" + init);
isaheadequal = false;
isaheadchar = false;
}
});
btn_5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isnowpoint)
init = init * 10 + 5;
else {
double num = 1;
pointnum++;
for (int i = 0; i < pointnum; i++)
num /= 10;
init += 5 * num;
}
tv_calcul.setText("" + init);
isaheadequal = false;
isaheadchar = false;
}
});
btn_6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isnowpoint)
init = init * 10 + 6;
else {
double num = 1;
pointnum++;
for (int i = 0; i < pointnum; i++)
num /= 10;
init += 6 * num;
}
tv_calcul.setText("" + init);
isaheadequal = false;
isaheadchar = false;
}
});
btn_7.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isnowpoint)
init = init * 10 + 7;
else {
double num = 1;
pointnum++;
for (int i = 0; i < pointnum; i++)
num /= 10;
init += 7 * num;
}
tv_calcul.setText("" + init);
isaheadequal = false;
isaheadchar = false;
}
});
btn_8.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isnowpoint)
init = init * 10 + 8;
else {
double num = 1;
pointnum++;
for (int i = 0; i < pointnum; i++)
num /= 10;
init += 8 * num;
}
tv_calcul.setText("" + init);
isaheadequal = false;
isaheadchar = false;
}
});
btn_9.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isnowpoint)
init = init * 10 + 9;
else {
double num = 1;
pointnum++;
for (int i = 0; i < pointnum; i++)
num /= 10;
init += 9 * num;
}
tv_calcul.setText("" + init);
isaheadequal = false;
isaheadchar = false;
}
});
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { switch (calcul) {
case '+': {
nowsum += init;
arr.add(nowsum);
break;
}
case '-': {
nowsum -= init;
arr.add(nowsum); break;
}
case '*': {
nowsum *= init;
arr.add(nowsum); break;
}
case '/': {
if (init != 0) {
nowsum /= init;
arr.add(nowsum);
} else
Toast.makeText(getApplicationContext(), "不能除0!", Toast.LENGTH_LONG).show();
break;
}
case '士': {
nowsum *= -1;
arr.add(nowsum);
break;
}
case '%': {
nowsum %= init;
arr.add(nowsum);
break;
}
default: {
nowsum += init;
}
}
if (isaheadchar) {
if (!isaheadsqr)
tv_cord.setText(tv_cord.getText().subSequence(0, tv_cord.getText().length() - 1));
calcul = '+'; }
if (!isaheadequal) {
if (!isaheadchar)
tv_cord.setText(tv_cord.getText() + "" + init + "+");
else tv_cord.setText(tv_cord.getText() + "+");
tv_calcul.setText("" + nowsum);
} else {
tv_cord.setText("" + nowsum + "+");
tv_calcul.setText("" + nowsum);
}
calcul = '+';
init = 0;
isaheadequal = false;
isaheadchar = true;
isaheadsqr = false;
isnowpoint = false;
pointnum = 0;
}
});
btn_sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isaheadequal) {
tv_cord.setText("");
}
switch (calcul) {
case '+': {
nowsum += init;
arr.add(nowsum); break;
}
case '-': {
nowsum -= init;
arr.add(nowsum); break;
}
case '*': {
nowsum *= init;
arr.add(nowsum); break;
}
case '/': {
if (init != 0) {
nowsum /= init;
arr.add(nowsum);
} else
Toast.makeText(getApplicationContext(), "不能除0!", Toast.LENGTH_LONG).show();
break;
}
case '士': {
nowsum *= -1;
arr.add(nowsum);
break;
}
case '%': {
nowsum %= init;
arr.add(nowsum);
break;
}
default: {
nowsum += init;
}
}
if (isaheadchar) {
if (!isaheadsqr)
tv_cord.setText(tv_cord.getText().subSequence(0, tv_cord.getText().length() - 1));
calcul = '-';
}
if (!isaheadequal) {
if (!isaheadchar)
tv_cord.setText(tv_cord.getText() + "" + init + "-");
else tv_cord.setText(tv_cord.getText() + "-");
tv_calcul.setText("" + nowsum);
} else {
tv_cord.setText("" + nowsum + "-");
tv_calcul.setText("" + nowsum);
}
calcul = '-';
init = 0;
isaheadequal = false;
isaheadchar = true;
isaheadsqr = false;
isnowpoint = false;
pointnum = 0;
}
});
btn_mul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isaheadequal) {
tv_cord.setText("");
}
switch (calcul) {
case '+': {
nowsum += init;
arr.add(nowsum); break;
}
case '-': {
nowsum -= init;
arr.add(nowsum); break;
}
case '*': {
nowsum *= init;
arr.add(nowsum);
break;
}
case '/': {
if (init != 0) {
nowsum /= init;
arr.add(nowsum);
} else
Toast.makeText(getApplicationContext(), "不能除0!", Toast.LENGTH_LONG).show();
break;
}
case '士': {
nowsum *= -1;
arr.add(nowsum);
break;
}
case '%': {
nowsum %= init;
arr.add(nowsum);
break;
}
default: {
nowsum += init;
}
}
//if ptr calcul is calcul change it
if (isaheadchar) {
if (!isaheadsqr)
tv_cord.setText(tv_cord.getText().subSequence(0, tv_cord.getText().length() - 1));
calcul = '*';
}
if (!isaheadequal) {
if (!isaheadchar)
tv_cord.setText(tv_cord.getText() + "" + init + "×");
else tv_cord.setText(tv_cord.getText() + "×");
tv_calcul.setText("" + nowsum);
} else {
tv_cord.setText("" + nowsum + "×");
tv_calcul.setText("" + nowsum);
}
calcul = '*';
init = 0;
isaheadchar = true;
isaheadequal = false;
isaheadsqr = false;
isnowpoint = false;
pointnum = 0;
}
});
btn_divide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isaheadequal) {
tv_cord.setText("");
}
switch (calcul) {
case '+': {
nowsum += init;
arr.add(nowsum); break;
}
case '-': {
nowsum -= init;
arr.add(nowsum); break;
}
case '*': {
nowsum *= init;
arr.add(nowsum); break;
}
case '/': {
if (init != 0) {
nowsum /= init;
arr.add(nowsum);
} else
Toast.makeText(getApplicationContext(), "不能除0!", Toast.LENGTH_LONG).show();
break;
}
case '士': {
nowsum *= -1;
arr.add(nowsum);
break;
}
case '%': {
nowsum %= init;
arr.add(nowsum);
break;
}
default: {
nowsum += init;
}
}
if (isaheadchar) {
if (!isaheadsqr)
tv_cord.setText(tv_cord.getText().subSequence(0, tv_cord.getText().length() - 1));
calcul = '/';
}
if (!isaheadequal) {
if (!isaheadchar)
tv_cord.setText(tv_cord.getText() + "" + init + "÷");
else tv_cord.setText(tv_cord.getText() + "÷");
tv_calcul.setText("" + nowsum);
} else {
tv_cord.setText("" + nowsum + "÷");
tv_calcul.setText("" + nowsum);
}
calcul = '/';
init = 0;
isaheadequal = false;
isaheadchar = true;
isaheadsqr = false;
isnowpoint = false;
pointnum = 0;
}
});
btn_rem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isaheadequal) {
tv_cord.setText("");
}
switch (calcul) {
case '+': {
nowsum += init;
arr.add(nowsum); break;
}
case '-': {
nowsum -= init;
arr.add(nowsum); break;
}
case '*': {
nowsum *= init;
arr.add(nowsum); break;
}
case '/': {
if (init != 0) {
nowsum /= init;
arr.add(nowsum);
} else
Toast.makeText(getApplicationContext(), "不能除0!", Toast.LENGTH_LONG).show();
break;
}
case '士': {
nowsum *= -1;
arr.add(nowsum);
break;
}
case '%': {
nowsum %= init;
arr.add(nowsum);
break;
}
default: {
}
}
if (!isaheadequal) {
tv_cord.setText(tv_cord.getText() + "" + init + "%");
tv_calcul.setText("" + nowsum);
} else {
tv_cord.setText("" + nowsum + "%");
tv_calcul.setText("" + nowsum);
isaheadequal = false;
}
calcul = '%';
init = 0;
isnowpoint = false;
pointnum = 0;
}
});
btn_neg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double nowcal = Double.parseDouble(tv_calcul.getText().toString());
nowcal *= -1;
init = nowcal;
tv_calcul.setText("" + init);
isnowpoint = false;
pointnum = 0;
}
});
btn_point.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isnowpoint = true;
}
});
btn_equal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isaheadequal) {
tv_cord.setText("");
}
switch (calcul) {
case '+': {
nowsum += init;
arr.add(nowsum);
break;
}
case '-': {
nowsum -= init;
arr.add(nowsum);
break;
}
case '*': {
nowsum *= init;
arr.add(nowsum); break;
}
case '/': {
if (init != 0) {
nowsum /= init;
arr.add(nowsum);
} else
Toast.makeText(getApplicationContext(), "不能除0!", Toast.LENGTH_LONG).show();
break;
}
case '士': {
nowsum *= -1;
arr.add(nowsum);
break;
}
case '%': {
nowsum %= init;
arr.add(nowsum);
break;
}
default: {
nowsum = init;
}
}
if (!isaheadsqr)
tv_cord.setText(tv_cord.getText() + "" + init + "=");
else tv_cord.setText(tv_cord.getText() + "=");
tv_calcul.setText("" + nowsum);
calcul = '#';
init = 0;
isaheadequal = true;
isaheadsqr = false;
isnowpoint = false;
pointnum = 0;
}
});
btn_ac.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv_calcul.setText("");
tv_cord.setText("");
calcul = '#';
init = 0;
nowsum = 0;
isaheadchar = false;
isnowpoint = false;
isaheadequal = false;
isaheadsqr = false;
pointnum = 0;
arr.removeAll(arr);
}
});
btn_del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { if (!isnowpoint)
init = (int) init / 10;
else {
if (tv_calcul.getText().length() > 2) {
tv_calcul.setText(tv_calcul.getText().subSequence(0, tv_calcul.getText().length() - 1));
init = Double.parseDouble(tv_calcul.getText().toString());
} else {
isnowpoint = false;
pointnum = 0;
}
}
tv_calcul.setText("" + init);
}
});
btn_pf.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double ptr;
double nowcal = Double.parseDouble(tv_calcul.getText().toString());
nowcal *= nowcal;
ptr = init;
init = nowcal;
tv_calcul.setText("" + init);
tv_cord.setText(tv_cord.getText() + "" + ptr + "²");
isaheadsqr = true;
isaheadchar = true;
pointnum = 0;
}
});
btn_sqrt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double ptr;
double nowcal = Double.parseDouble(tv_calcul.getText().toString());
nowcal = sqrt(nowcal);
ptr = init;
init = nowcal;
tv_calcul.setText("" + init);
tv_cord.setText(tv_cord.getText() + "√" + ptr);
isaheadsqr = true;
isaheadchar = true;
pointnum = 0;
}
});
btn_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (arr.size()>=1) {
Log.d("A","111");
arr.remove(arr.size()-1);
nowsum = arr.get(arr.size()-1);
init = 0;
tv_cord.setText("" + nowsum);
tv_calcul.setText("" + nowsum);
}
}
}); }
}

第一个安卓app——计算器的更多相关文章

  1. .net程序员做的第一个安卓APP

    我从毕业之后一直做的是ASP.NET,从毕业到现在都已经五六个年头了.一个事物接触久了就会慢慢没有了新鲜感热情也褪去的差不多了,我又是对新事物比较感兴趣的,虽说Android早就不算什么新事物,当对于 ...

  2. 上午做的第一个安卓app

    刚开始学习安卓开发,有好多不懂,好多快捷键不知道,好多文件也不知道是干什么用的,初学时的确会有很多烦恼,比如哪里又多一个空格也会报错,有时候错误很难看懂. 嘿嘿,一上午的功夫边学习边调代码,做出了我第 ...

  3. AndroidStudio学习笔记-第一个安卓程序

    要带一个本科生做一部分跟安卓有点关系的项目,于是趁着机会学习一下编写安卓程序. 第一篇材料来自谷歌官方,传送门:https://developer.android.com/training/basic ...

  4. 【转载】安卓APP架构

    注:本篇博文转载于 http://my.oschina.net/mengshuai/blog/541314?fromerr=z8tDxWUH 本文介绍了文章作者从事了几年android应用的开发,经历 ...

  5. 如何做个简单安卓App流程

    有同学做毕业设计,问怎样做个简单安卓App流程,我是做服务端的,也算是经常接触app,想着做app应该很简单吧,不就做个页面,会跳转,有数据不就行了,我解释了半天,人家始终没听懂,算了,我第二天问了下 ...

  6. 篇3 安卓app自动化测试-搞定界面元素

    篇3                 安卓app自动化测试-搞定界面元素 --lamecho辣么丑 1.1概要 大家好! 我是lamecho(辣么丑),今天是<安卓app自动化测试>的第三 ...

  7. 篇4 安卓app自动化测试-Appium API进阶

    篇4                 安卓app自动化测试-Appium API进阶 --lamecho辣么丑 1.1概要 大家好! 我是lamecho(辣么丑),今天是<安卓app自动化测试& ...

  8. 篇2 安卓app自动化测试-初识python调用appium

    篇2              安卓app自动化测试-初识python调用appium --lamecho辣么丑 1.1概要 大家好!我是lamecho(辣么丑),上一篇也是<安卓app自动化测 ...

  9. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP

      前  言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用HTML5开发手机APP,而随着手机硬件设备配置的不断提升,各种开发框架的不断优化,也使着H5开发的 ...

随机推荐

  1. codewars--js--vowels counting+js正则相关知识

    问题描述: Return the number (count) of vowels in the given string. We will consider a, e, i, o, and u as ...

  2. AJAX优势、跨域方案及JSON数据格式和浏览器中JSON对象

    ajax 不重新加载整个网页的情况下,更新部分网页的技术 注意:ajax只有在服务器上运行才能生效,我在本地一般用phpstudy 优点: 1.优化用户体验 2.承担了一部分本该服务器端的工作,减轻了 ...

  3. kuangbin专题 专题九 连通图 Warm up HDU - 4612

    题目链接:https://vjudge.net/problem/HDU-4612 题目:一个大地图,给定若干个连通图,每个连通图中有若干个桥,你可以在任意某个连通图的 任意两个点添加一条边,问,添加一 ...

  4. html基本标签表单实现交互原理,单选框,复选框,下拉框介绍

    表单是什么?表单是前端和服务器做交互的一种机制,表单收集用户输入信息,之后发送或者提交给服务器.用户在输入的信息称之为内容,内容的文本分为普通和密码型,用户通过单选框.复选框.下拉框(也就是下拉菜单) ...

  5. JavaScript 浅复制和深复制

    浅复制只会复制第一层的元素,嵌套的元素还是原来的引用. const obj = { a: 1, b: 2 } const copyObj = Object.assign({}, obj) const ...

  6. Excel——排序筛选

    1,自定义排序:多个关键字,从右向左一一排序 * 按颜色排序 * 按自定义序列排序 *两列中,列一个中间数,升序 * 打印标题行 * 选中,定位条件(可见),选择 * 数值筛选(大于等于),文本筛选( ...

  7. Angular修改Port文件一览

    \protractor.conf.js\README.md\node_modules\angular-cli\README.md\node_modules\angular-cli\blueprints ...

  8. 【spring boot】SpringBoot初学(9.1)– 简单配置corsFilter对跨域请求支持

    前言 只是简单的配置实现了cors,并没有讲任何东西.(有兴趣的可看: CORS 跨域 实现思路及相关解决方案) github: https://github.com/vergilyn/SpringB ...

  9. cf1214E

    题意简述:构造一棵包含2*n个节点的树,要求2*i 和 2*i-1之间的距离等于d[i]<=n 1<=i<=n 给出N和d数组,输入对应的边 题解:对d数组按照从大到小排序,然后首先 ...

  10. VISIO 的一些技巧

    1.复制绘图 如果格式改变,在“设计”选项卡里将“将主题运用于新建的形状”前面的√去掉