第一个安卓app——计算器
几天前,我花了一天时间,结合这段时间所学知识开发出了一个简单的计算器,它由两个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——计算器的更多相关文章
- .net程序员做的第一个安卓APP
我从毕业之后一直做的是ASP.NET,从毕业到现在都已经五六个年头了.一个事物接触久了就会慢慢没有了新鲜感热情也褪去的差不多了,我又是对新事物比较感兴趣的,虽说Android早就不算什么新事物,当对于 ...
- 上午做的第一个安卓app
刚开始学习安卓开发,有好多不懂,好多快捷键不知道,好多文件也不知道是干什么用的,初学时的确会有很多烦恼,比如哪里又多一个空格也会报错,有时候错误很难看懂. 嘿嘿,一上午的功夫边学习边调代码,做出了我第 ...
- AndroidStudio学习笔记-第一个安卓程序
要带一个本科生做一部分跟安卓有点关系的项目,于是趁着机会学习一下编写安卓程序. 第一篇材料来自谷歌官方,传送门:https://developer.android.com/training/basic ...
- 【转载】安卓APP架构
注:本篇博文转载于 http://my.oschina.net/mengshuai/blog/541314?fromerr=z8tDxWUH 本文介绍了文章作者从事了几年android应用的开发,经历 ...
- 如何做个简单安卓App流程
有同学做毕业设计,问怎样做个简单安卓App流程,我是做服务端的,也算是经常接触app,想着做app应该很简单吧,不就做个页面,会跳转,有数据不就行了,我解释了半天,人家始终没听懂,算了,我第二天问了下 ...
- 篇3 安卓app自动化测试-搞定界面元素
篇3 安卓app自动化测试-搞定界面元素 --lamecho辣么丑 1.1概要 大家好! 我是lamecho(辣么丑),今天是<安卓app自动化测试>的第三 ...
- 篇4 安卓app自动化测试-Appium API进阶
篇4 安卓app自动化测试-Appium API进阶 --lamecho辣么丑 1.1概要 大家好! 我是lamecho(辣么丑),今天是<安卓app自动化测试& ...
- 篇2 安卓app自动化测试-初识python调用appium
篇2 安卓app自动化测试-初识python调用appium --lamecho辣么丑 1.1概要 大家好!我是lamecho(辣么丑),上一篇也是<安卓app自动化测 ...
- MUI框架开发HTML5手机APP(一)--搭建第一个手机APP
前 言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用HTML5开发手机APP,而随着手机硬件设备配置的不断提升,各种开发框架的不断优化,也使着H5开发的 ...
随机推荐
- 使用Visual Studio Comunity 2019开发Unity C#脚本没有自动补全的解决方法
最近开始试着玩Unity3D,要为场景中的物体编辑脚本.Unity3D推荐的脚本语言是C#,在Unity打开C#就会使用Visual Studio来进行编辑. 启动Visual Studio之后注意到 ...
- JDK SPI 机制
一.概述 最早看到 SPI 这个机制是在 dubbo 实现 中,最近发现原来也不是什么新东西,竟然就是 JDK 中内置的玩意,今天就来一探究竟,看看它到底是什么玩意! SPI的全称是 Service ...
- StarUML之四、StarUML的Diagrams(图)与Elements(元素)及相关属性
Diagrams(图)可以理解为画布 1:创建图 在右侧的Model Explorer管理界面的第一个节点右键,或者选择菜单中Model | Add Diagram | [DiagramType]都 ...
- 在服务器上搭建远端git仓库
推荐使用运行Liunx的机器 请获取root权限后进行下面操作 安装git # 检查是否安装了git如果有版本号就无需再安装 git -v # 安装git sudo apt-get install g ...
- 【转】Makefile步步为营
Makefile步步为营 本目录主要包含Makefile一步步递进学习的示例代码 makefile代码实例:https://www.lanzous.com/i9m9npi step0:Makefile ...
- 苹果Mac电脑永久路由的添加 & Mac 校园网连接教程
学校校园网面向全校师生开放,无奈Windows用户基数大,学校只为Windows平台制作了内网连接工具,Mac平台资源较少,本人查阅相关资料后,总结整理出以下步骤,方便本校学生连接校园网.有永久路由添 ...
- css的三种导入方式
内联样式表 <p style="font-size:50px; color:blue">css内联样式表</p> 内部样式表 <style type= ...
- 逻辑卷管理(LVM)-迁移
逻辑卷管理(LVM)-迁移 更换卷组中逻辑卷中的一块硬盘流程:1确保卷组剩余空间大于需要更换的空间(缩减或添加添加新空间)-2迁移-3从卷组删除-4删除物理卷 #移除sdc1 1.查看卷组可用空间是否 ...
- day 12 函数
函数 函数的定义和调用 def 函数名(形参): 函数体 return 返回值 调用 函数名(实参) 站在形参的角度上: 位置参数, *args, 默认参数(陷阱), 关键字参数, **kwargs ...
- 纪中18日c组模拟赛
T2 GMOJ2127. 电子表格 (File IO): input:excel.in output:excel.out 时间限制: 1000 ms 空间限制: 262144 KB 具体限制 ...