第一个安卓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
1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 tools:context="com.Appalication_Trial.Calculator"> 7 8 <TextView 9 android:id="@+id/tv_cord" 10 android:layout_width="match_parent" 11 android:layout_height="99dp" 12 android:background="@drawable/riple_btn_pink" 13 android:gravity="right" 14 android:textSize="30dp"></TextView> 15 16 <TextView 17 android:id="@+id/tv_calcul" 18 android:layout_width="match_parent" 19 android:layout_height="99dp" 20 android:layout_below="@+id/tv_cord" 21 android:background="@drawable/riple_btn_pink" 22 android:gravity="right" 23 android:textSize="30dp"></TextView> 24 <LinearLayout 25 android:layout_width="match_parent" 26 android:layout_height="match_parent" 27 android:layout_below="@id/tv_calcul" 28 android:orientation="vertical" 29 android:gravity="center"> 30 <LinearLayout 31 android:layout_width="match_parent" 32 android:layout_height="0dp" 33 android:layout_weight="1" 34 android:orientation="horizontal" 35 ><Button 36 android:id="@+id/calcul_btn_ac" 37 android:layout_width="70dp" 38 android:layout_height="match_parent" 39 android:layout_marginTop="0dp" 40 android:background="@drawable/riple_btn_nocorner" 41 android:fontFamily="宋体" 42 android:text="AC" 43 android:textSize="40dp" 44 android:layout_weight="1" 45 android:textColor="#169FDF" 46 ></Button> 47 <Button 48 android:id="@+id/calcul_btn_back" 49 android:layout_width="70dp" 50 android:layout_height="match_parent" 51 android:layout_marginTop="0dp" 52 android:layout_toRightOf="@id/calcul_btn_ac" 53 android:background="@drawable/riple_btn_nocorner" 54 android:fontFamily="宋体" 55 android:text="bc" 56 android:textColor="#169FDF" 57 android:layout_weight="1" 58 android:textSize="40dp"></Button> 59 <Button 60 android:id="@+id/calcul_btn_neg" 61 android:layout_width="70dp" 62 android:layout_height="match_parent" 63 android:layout_marginTop="0dp" 64 android:background="@drawable/riple_btn_nocorner" 65 android:text="+/-" 66 android:textSize="40dp" 67 android:textColor="#169FDF" 68 android:layout_weight="1" 69 android:fontFamily="宋体"></Button> 70 <Button 71 android:id="@+id/calcul_btn_del" 72 android:layout_width="140dp" 73 android:layout_height="match_parent" 74 android:layout_marginTop="0dp" 75 android:background="@drawable/riple_btn_nocorner" 76 android:text="del" 77 android:textSize="30dp" 78 android:textColor="#169FDF" 79 android:layout_weight="2" 80 android:fontFamily="宋体"></Button> 81 82 </LinearLayout> 83 <LinearLayout 84 android:layout_width="match_parent" 85 android:layout_weight="1" 86 android:layout_height="0dp" 87 android:orientation="horizontal" 88 > 89 <Button 90 android:id="@+id/calcul_btn_1" 91 android:layout_width="70dp" 92 android:layout_height="match_parent" 93 android:layout_marginTop="0dp" 94 android:background="@drawable/riple_btn_nocorner" 95 android:fontFamily="宋体" 96 android:text="1" 97 android:layout_weight="1" 98 android:textColor="#169FDF" 99 android:textSize="40dp"></Button> 100 <Button 101 android:id="@+id/calcul_btn_2" 102 android:layout_width="70dp" 103 android:layout_height="match_parent" 104 android:layout_marginTop="0dp" 105 android:background="@drawable/riple_btn_nocorner" 106 android:text="2" 107 android:layout_weight="1" 108 android:textSize="40dp" 109 android:textColor="#169FDF" 110 android:fontFamily="宋体"></Button> 111 <Button 112 android:id="@+id/calcul_btn_3" 113 android:layout_width="70dp" 114 android:layout_height="match_parent" 115 android:layout_marginTop="0dp" 116 android:background="@drawable/riple_btn_nocorner" 117 android:text="3" 118 android:textSize="40dp" 119 android:textColor="#169FDF" 120 android:layout_weight="1" 121 android:fontFamily="宋体"></Button> 122 <Button 123 android:id="@+id/calcul_btn_pf" 124 android:layout_width="70dp" 125 android:layout_height="match_parent" 126 android:layout_below="@id/calcul_btn_back" 127 android:layout_marginTop="0dp" 128 android:layout_toRightOf="@id/calcul_btn_9" 129 android:background="@drawable/riple_btn_nocorner" 130 android:text="x²" 131 android:textAllCaps="false" 132 android:textSize="30dp" 133 android:textColor="#169FDF" 134 android:layout_weight="1" 135 android:fontFamily="宋体"></Button> 136 <Button 137 android:id="@+id/calcul_btn_sqrt" 138 android:layout_width="70dp" 139 android:layout_height="match_parent" 140 android:layout_below="@id/calcul_btn_back" 141 android:layout_marginTop="0dp" 142 android:layout_toRightOf="@id/calcul_btn_pf" 143 android:background="@drawable/riple_btn_nocorner" 144 android:text="√x" 145 android:textAllCaps="false" 146 android:textSize="30dp" 147 android:textColor="#169FDF" 148 android:layout_weight="1" 149 android:fontFamily="宋体"></Button> 150 151 </LinearLayout> 152 <LinearLayout 153 android:layout_width="match_parent" 154 android:layout_weight="1" 155 android:layout_height="0dp" 156 android:orientation="horizontal" 157 > 158 <Button 159 android:id="@+id/calcul_btn_4" 160 android:layout_width="70dp" 161 android:layout_height="match_parent" 162 android:layout_marginTop="0dp" 163 android:background="@drawable/riple_btn_nocorner" 164 android:text="4" 165 android:textSize="40dp" 166 android:layout_weight="1" 167 android:textColor="#169FDF" 168 android:fontFamily="宋体"></Button> 169 <Button 170 android:id="@+id/calcul_btn_5" 171 android:layout_width="70dp" 172 android:layout_height="match_parent" 173 android:layout_marginTop="0dp" 174 android:background="@drawable/riple_btn_nocorner" 175 android:text="5" 176 android:textSize="40dp" 177 android:textColor="#169FDF" 178 android:layout_weight="1" 179 android:fontFamily="宋体"></Button> 180 <Button 181 android:id="@+id/calcul_btn_6" 182 android:layout_width="70dp" 183 android:layout_height="match_parent" 184 android:layout_marginTop="0dp" 185 android:background="@drawable/riple_btn_nocorner" 186 android:text="6" 187 android:textSize="40dp" 188 android:textColor="#169FDF" 189 android:layout_weight="1" 190 android:fontFamily="宋体"></Button> 191 <Button 192 android:id="@+id/calcul_btn_add" 193 android:layout_width="70dp" 194 android:layout_height="match_parent" 195 android:layout_marginTop="0dp" 196 android:background="@drawable/riple_btn_nocorner" 197 android:text="+" 198 android:textSize="40dp" 199 android:textColor="#169FDF" 200 android:fontFamily="宋体" 201 android:layout_weight="1" 202 ></Button> 203 <Button 204 android:id="@+id/calcul_btn_multiply" 205 android:layout_width="70dp" 206 android:layout_height="match_parent" 207 android:layout_weight="1" 208 android:layout_marginTop="0dp" 209 android:background="@drawable/riple_btn_nocorner" 210 android:text="×" 211 android:textSize="40dp" 212 android:textColor="#169FDF" 213 android:fontFamily="宋体"></Button></LinearLayout> 214 <LinearLayout 215 android:layout_width="match_parent" 216 android:layout_weight="1" 217 android:layout_height="0dp" 218 android:orientation="horizontal" 219 > 220 221 <Button 222 android:id="@+id/calcul_btn_7" 223 android:layout_width="70dp" 224 android:layout_height="match_parent" 225 android:layout_below="@id/calcul_btn_4" 226 android:layout_marginTop="0dp" 227 android:layout_toLeftOf="@id/calcul_btn_5" 228 android:background="@drawable/riple_btn_nocorner" 229 android:text="7" 230 android:textSize="40dp" 231 android:layout_weight="1" 232 android:textColor="#169FDF" 233 android:fontFamily="宋体"></Button> 234 <Button 235 android:id="@+id/calcul_btn_8" 236 android:layout_width="70dp" 237 android:layout_height="match_parent" 238 android:layout_below="@id/calcul_btn_5" 239 android:layout_marginTop="0dp" 240 android:layout_toRightOf="@id/calcul_btn_7" 241 android:background="@drawable/riple_btn_nocorner" 242 android:text="8" 243 android:layout_weight="1" 244 android:textSize="40dp" 245 android:textColor="#169FDF" 246 android:fontFamily="宋体"></Button> 247 <Button 248 android:id="@+id/calcul_btn_9" 249 android:layout_width="70dp" 250 android:layout_height="match_parent" 251 android:layout_below="@id/calcul_btn_6" 252 android:layout_marginTop="0dp" 253 android:layout_toRightOf="@id/calcul_btn_8" 254 android:background="@drawable/riple_btn_nocorner" 255 android:text="9" 256 android:layout_weight="1" 257 android:textColor="#169FDF" 258 android:textSize="40dp" 259 android:fontFamily="宋体"></Button> 260 <Button 261 android:id="@+id/calcul_btn_sub" 262 android:layout_width="70dp" 263 android:layout_height="match_parent" 264 android:layout_marginTop="0dp" 265 android:background="@drawable/riple_btn_nocorner" 266 android:text="-" 267 android:textSize="40dp" 268 android:textColor="#169FDF" 269 android:layout_weight="1" 270 android:fontFamily="宋体"></Button> 271 <Button 272 android:id="@+id/calcul_btn_divide" 273 android:layout_width="70dp" 274 android:layout_height="match_parent" 275 android:layout_marginTop="0dp" 276 android:background="@drawable/riple_btn_nocorner" 277 android:layout_weight="1" 278 android:text="÷" 279 android:textSize="40dp" 280 android:textColor="#169FDF" 281 android:fontFamily="宋体"></Button> 282 </LinearLayout> 283 <LinearLayout 284 android:layout_width="match_parent" 285 android:layout_weight="1" 286 android:layout_height="0dp" 287 android:orientation="horizontal" 288 > 289 <Button 290 android:id="@+id/calcul_btn_rem" 291 android:layout_width="70dp" 292 android:layout_height="match_parent" 293 android:layout_below="@id/calcul_btn_divide" 294 android:layout_marginTop="0dp" 295 android:layout_toLeftOf="@id/calcul_btn_0" 296 android:background="@drawable/riple_btn_nocorner" 297 android:text="%" 298 android:layout_weight="1" 299 android:textSize="40dp" 300 android:textColor="#169FDF" 301 android:fontFamily="宋体"></Button> 302 <Button 303 android:id="@+id/calcul_btn_0" 304 android:layout_width="70dp" 305 android:layout_height="match_parent" 306 android:layout_below="@id/calcul_btn_8" 307 android:layout_marginTop="0dp" 308 android:layout_toRightOf="@id/calcul_btn_7" 309 android:background="@drawable/riple_btn_nocorner" 310 android:text="0" 311 android:textSize="40dp" 312 android:layout_weight="1" 313 android:fontFamily="宋体" 314 android:textColor="#169FDF" 315 ></Button> 316 <Button 317 android:id="@+id/calcul_btn_point" 318 android:layout_width="70dp" 319 android:layout_height="match_parent" 320 android:layout_below="@id/calcul_btn_9" 321 android:layout_marginTop="0dp" 322 android:layout_toRightOf="@id/calcul_btn_0" 323 android:background="@drawable/riple_btn_nocorner" 324 android:text="." 325 android:textAllCaps="false" 326 android:layout_weight="1" 327 android:textSize="70dp" 328 android:textColor="#169FDF" 329 android:fontFamily="宋体"></Button> 330 <Button 331 android:id="@+id/calcul_btn_equal" 332 android:layout_width="140dp" 333 android:layout_height="match_parent" 334 android:layout_below="@id/calcul_btn_divide" 335 android:layout_marginTop="0dp" 336 android:layout_toRightOf="@id/calcul_btn_neg" 337 android:background="@drawable/riple_btn_nocorner" 338 android:text="=" 339 android:textSize="40dp" 340 android:layout_weight="2" 341 android:textColor="#169FDF" 342 android:fontFamily="宋体"></Button> 343 </LinearLayout> 344 </LinearLayout> 345 </RelativeLayout>
Calculater.java
1 package com.Appalication_Trial; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android.os.Bundle; 6 import android.util.Log; 7 import android.view.View; 8 import android.widget.Button; 9 import android.widget.TextView; 10 import android.widget.Toast; 11 12 import com.example.myapplication5.R; 13 14 import java.util.ArrayList; 15 16 import static java.lang.Math.pow; 17 import static java.lang.Math.sqrt; 18 19 public class Calculator extends AppCompatActivity { 20 private Button btn_0, btn_1, btn_2, btn_3, btn_4, btn_5, btn_6, btn_7, btn_8, btn_9, btn_add, 21 btn_del, btn_mul, btn_neg, btn_ac, btn_sub, btn_equal, btn_divide, btn_sqrt, btn_rem, 22 btn_point, btn_pf, btn_back; 23 private TextView tv_cord, tv_calcul; 24 private double init = 0;//当前输入数据 25 private char calcul = '#';//运算符 26 private double nowsum = 0;//当前运算结果 27 private int pointnum = 0;//小数点输入次数 28 boolean isaheadchar = false, isnowpoint = false, isaheadequal = false, isaheadsqr = false; 29 //isaheadchar: 是否输入过运算符 30 //isnowpoint:小数点状态 31 //isaheadequal:前一个运算符是否为= 32 //isaheadsqr:前一个运算符是否为平方,主要为setText方便而设置 33 ArrayList<Double> arr = new ArrayList<>(); 34 35 @Override 36 protected void onCreate(Bundle savedInstanceState) { 37 super.onCreate(savedInstanceState); 38 setContentView(R.layout.activity_calculator); 39 btn_0 = findViewById(R.id.calcul_btn_0); 40 btn_1 = findViewById(R.id.calcul_btn_1); 41 btn_2 = findViewById(R.id.calcul_btn_2); 42 btn_3 = findViewById(R.id.calcul_btn_3); 43 btn_4 = findViewById(R.id.calcul_btn_4); 44 btn_5 = findViewById(R.id.calcul_btn_5); 45 btn_6 = findViewById(R.id.calcul_btn_6); 46 btn_7 = findViewById(R.id.calcul_btn_7); 47 btn_8 = findViewById(R.id.calcul_btn_8); 48 btn_9 = findViewById(R.id.calcul_btn_9); 49 btn_point = findViewById(R.id.calcul_btn_point); 50 btn_pf = findViewById(R.id.calcul_btn_pf); 51 btn_back = findViewById(R.id.calcul_btn_back); 52 btn_sqrt = findViewById(R.id.calcul_btn_sqrt); 53 btn_sub = findViewById(R.id.calcul_btn_sub); 54 btn_ac = findViewById(R.id.calcul_btn_ac); 55 btn_add = findViewById(R.id.calcul_btn_add); 56 btn_equal = findViewById(R.id.calcul_btn_equal); 57 btn_del = findViewById(R.id.calcul_btn_del); 58 btn_divide = findViewById(R.id.calcul_btn_divide); 59 btn_mul = findViewById(R.id.calcul_btn_multiply); 60 btn_rem = findViewById(R.id.calcul_btn_rem); 61 btn_neg = findViewById(R.id.calcul_btn_neg); 62 tv_calcul = findViewById(R.id.tv_calcul); 63 tv_cord = findViewById(R.id.tv_cord); 64 tv_calcul.setText("0"); 65 tv_cord.setText(""); 66 for (int i = 0; i <= 9; i++) 67 btn_0.setOnClickListener(new View.OnClickListener() { 68 @Override 69 public void onClick(View v) { 70 if (!isnowpoint) 71 init = init * 10 + 0; 72 else { 73 double num = 1; 74 pointnum++; 75 for (int i = 0; i < pointnum; i++) 76 num /= 10; 77 init += 0 * num; 78 } 79 tv_calcul.setText("" + init); 80 isaheadequal = false; 81 isaheadchar = false; 82 } 83 }); 84 btn_1.setOnClickListener(new View.OnClickListener() { 85 @Override 86 public void onClick(View v) { 87 if (!isnowpoint) 88 init = init * 10 + 1; 89 else { 90 double num = 1; 91 pointnum++; 92 for (int i = 0; i < pointnum; i++) 93 num /= 10; 94 init += 1 * num; 95 } 96 tv_calcul.setText("" + init); 97 isaheadequal = false; 98 isaheadchar = false; 99 } 100 }); 101 btn_2.setOnClickListener(new View.OnClickListener() { 102 @Override 103 public void onClick(View v) { 104 if (!isnowpoint) 105 init = init * 10 + 2; 106 else { 107 double num = 1; 108 pointnum++; 109 for (int i = 0; i < pointnum; i++) 110 num /= 10; 111 init += 2 * num; 112 } 113 tv_calcul.setText("" + init); 114 isaheadequal = false; 115 isaheadchar = false; 116 } 117 }); 118 btn_3.setOnClickListener(new View.OnClickListener() { 119 @Override 120 public void onClick(View v) { 121 if (!isnowpoint) 122 init = init * 10 + 3; 123 else { 124 double num = 1; 125 pointnum++; 126 for (int i = 0; i < pointnum; i++) 127 num /= 10; 128 init += 3 * num; 129 } 130 tv_calcul.setText("" + init); 131 isaheadequal = false; 132 isaheadchar = false; 133 } 134 }); 135 btn_4.setOnClickListener(new View.OnClickListener() { 136 @Override 137 public void onClick(View v) { 138 if (!isnowpoint) 139 init = init * 10 + 4; 140 else { 141 double num = 1; 142 pointnum++; 143 for (int i = 0; i < pointnum; i++) 144 num /= 10; 145 init += 4 * num; 146 } 147 tv_calcul.setText("" + init); 148 isaheadequal = false; 149 isaheadchar = false; 150 } 151 }); 152 btn_5.setOnClickListener(new View.OnClickListener() { 153 @Override 154 public void onClick(View v) { 155 if (!isnowpoint) 156 init = init * 10 + 5; 157 else { 158 double num = 1; 159 pointnum++; 160 for (int i = 0; i < pointnum; i++) 161 num /= 10; 162 init += 5 * num; 163 } 164 tv_calcul.setText("" + init); 165 isaheadequal = false; 166 isaheadchar = false; 167 } 168 }); 169 btn_6.setOnClickListener(new View.OnClickListener() { 170 @Override 171 public void onClick(View v) { 172 if (!isnowpoint) 173 init = init * 10 + 6; 174 else { 175 double num = 1; 176 pointnum++; 177 for (int i = 0; i < pointnum; i++) 178 num /= 10; 179 init += 6 * num; 180 } 181 tv_calcul.setText("" + init); 182 isaheadequal = false; 183 isaheadchar = false; 184 } 185 }); 186 btn_7.setOnClickListener(new View.OnClickListener() { 187 @Override 188 public void onClick(View v) { 189 if (!isnowpoint) 190 init = init * 10 + 7; 191 else { 192 double num = 1; 193 pointnum++; 194 for (int i = 0; i < pointnum; i++) 195 num /= 10; 196 init += 7 * num; 197 } 198 tv_calcul.setText("" + init); 199 isaheadequal = false; 200 isaheadchar = false; 201 } 202 }); 203 btn_8.setOnClickListener(new View.OnClickListener() { 204 @Override 205 public void onClick(View v) { 206 if (!isnowpoint) 207 init = init * 10 + 8; 208 else { 209 double num = 1; 210 pointnum++; 211 for (int i = 0; i < pointnum; i++) 212 num /= 10; 213 init += 8 * num; 214 } 215 tv_calcul.setText("" + init); 216 isaheadequal = false; 217 isaheadchar = false; 218 } 219 }); 220 btn_9.setOnClickListener(new View.OnClickListener() { 221 @Override 222 public void onClick(View v) { 223 if (!isnowpoint) 224 init = init * 10 + 9; 225 else { 226 double num = 1; 227 pointnum++; 228 for (int i = 0; i < pointnum; i++) 229 num /= 10; 230 init += 9 * num; 231 } 232 tv_calcul.setText("" + init); 233 isaheadequal = false; 234 isaheadchar = false; 235 } 236 }); 237 btn_add.setOnClickListener(new View.OnClickListener() { 238 @Override 239 public void onClick(View v) { 240 241 switch (calcul) { 242 case '+': { 243 nowsum += init; 244 arr.add(nowsum); 245 break; 246 } 247 case '-': { 248 nowsum -= init; 249 arr.add(nowsum); 250 251 break; 252 } 253 case '*': { 254 nowsum *= init; 255 arr.add(nowsum); 256 257 break; 258 } 259 case '/': { 260 if (init != 0) { 261 nowsum /= init; 262 arr.add(nowsum); 263 } else 264 Toast.makeText(getApplicationContext(), "不能除0!", Toast.LENGTH_LONG).show(); 265 break; 266 } 267 case '士': { 268 nowsum *= -1; 269 arr.add(nowsum); 270 break; 271 } 272 case '%': { 273 nowsum %= init; 274 arr.add(nowsum); 275 break; 276 } 277 default: { 278 nowsum += init; 279 } 280 } 281 if (isaheadchar) { 282 if (!isaheadsqr) 283 tv_cord.setText(tv_cord.getText().subSequence(0, tv_cord.getText().length() - 1)); 284 calcul = '+'; 285 286 } 287 if (!isaheadequal) { 288 if (!isaheadchar) 289 tv_cord.setText(tv_cord.getText() + "" + init + "+"); 290 else tv_cord.setText(tv_cord.getText() + "+"); 291 tv_calcul.setText("" + nowsum); 292 } else { 293 tv_cord.setText("" + nowsum + "+"); 294 tv_calcul.setText("" + nowsum); 295 } 296 calcul = '+'; 297 init = 0; 298 isaheadequal = false; 299 isaheadchar = true; 300 isaheadsqr = false; 301 isnowpoint = false; 302 pointnum = 0; 303 } 304 }); 305 btn_sub.setOnClickListener(new View.OnClickListener() { 306 @Override 307 public void onClick(View v) { 308 if (isaheadequal) { 309 tv_cord.setText(""); 310 } 311 switch (calcul) { 312 case '+': { 313 nowsum += init; 314 arr.add(nowsum); 315 316 break; 317 } 318 case '-': { 319 nowsum -= init; 320 arr.add(nowsum); 321 322 break; 323 } 324 case '*': { 325 nowsum *= init; 326 arr.add(nowsum); 327 328 break; 329 } 330 case '/': { 331 if (init != 0) { 332 nowsum /= init; 333 arr.add(nowsum); 334 } else 335 Toast.makeText(getApplicationContext(), "不能除0!", Toast.LENGTH_LONG).show(); 336 break; 337 } 338 case '士': { 339 nowsum *= -1; 340 arr.add(nowsum); 341 break; 342 } 343 case '%': { 344 nowsum %= init; 345 arr.add(nowsum); 346 break; 347 } 348 default: { 349 nowsum += init; 350 } 351 } 352 if (isaheadchar) { 353 if (!isaheadsqr) 354 tv_cord.setText(tv_cord.getText().subSequence(0, tv_cord.getText().length() - 1)); 355 calcul = '-'; 356 } 357 if (!isaheadequal) { 358 if (!isaheadchar) 359 tv_cord.setText(tv_cord.getText() + "" + init + "-"); 360 else tv_cord.setText(tv_cord.getText() + "-"); 361 tv_calcul.setText("" + nowsum); 362 } else { 363 tv_cord.setText("" + nowsum + "-"); 364 tv_calcul.setText("" + nowsum); 365 } 366 calcul = '-'; 367 init = 0; 368 isaheadequal = false; 369 isaheadchar = true; 370 isaheadsqr = false; 371 isnowpoint = false; 372 pointnum = 0; 373 } 374 }); 375 btn_mul.setOnClickListener(new View.OnClickListener() { 376 @Override 377 public void onClick(View v) { 378 if (isaheadequal) { 379 tv_cord.setText(""); 380 } 381 switch (calcul) { 382 case '+': { 383 nowsum += init; 384 arr.add(nowsum); 385 386 break; 387 } 388 case '-': { 389 nowsum -= init; 390 arr.add(nowsum); 391 392 break; 393 } 394 case '*': { 395 nowsum *= init; 396 arr.add(nowsum); 397 break; 398 } 399 case '/': { 400 if (init != 0) { 401 nowsum /= init; 402 arr.add(nowsum); 403 } else 404 Toast.makeText(getApplicationContext(), "不能除0!", Toast.LENGTH_LONG).show(); 405 break; 406 } 407 case '士': { 408 nowsum *= -1; 409 arr.add(nowsum); 410 break; 411 } 412 case '%': { 413 nowsum %= init; 414 arr.add(nowsum); 415 break; 416 } 417 default: { 418 nowsum += init; 419 } 420 } 421 //if ptr calcul is calcul change it 422 if (isaheadchar) { 423 if (!isaheadsqr) 424 tv_cord.setText(tv_cord.getText().subSequence(0, tv_cord.getText().length() - 1)); 425 calcul = '*'; 426 } 427 if (!isaheadequal) { 428 if (!isaheadchar) 429 tv_cord.setText(tv_cord.getText() + "" + init + "×"); 430 else tv_cord.setText(tv_cord.getText() + "×"); 431 tv_calcul.setText("" + nowsum); 432 } else { 433 tv_cord.setText("" + nowsum + "×"); 434 tv_calcul.setText("" + nowsum); 435 } 436 calcul = '*'; 437 init = 0; 438 isaheadchar = true; 439 isaheadequal = false; 440 isaheadsqr = false; 441 isnowpoint = false; 442 pointnum = 0; 443 } 444 }); 445 btn_divide.setOnClickListener(new View.OnClickListener() { 446 @Override 447 public void onClick(View v) { 448 if (isaheadequal) { 449 tv_cord.setText(""); 450 } 451 switch (calcul) { 452 case '+': { 453 nowsum += init; 454 arr.add(nowsum); 455 456 break; 457 } 458 case '-': { 459 nowsum -= init; 460 arr.add(nowsum); 461 462 break; 463 } 464 case '*': { 465 nowsum *= init; 466 arr.add(nowsum); 467 468 break; 469 } 470 case '/': { 471 if (init != 0) { 472 nowsum /= init; 473 arr.add(nowsum); 474 } else 475 Toast.makeText(getApplicationContext(), "不能除0!", Toast.LENGTH_LONG).show(); 476 break; 477 } 478 case '士': { 479 nowsum *= -1; 480 arr.add(nowsum); 481 break; 482 } 483 case '%': { 484 nowsum %= init; 485 arr.add(nowsum); 486 break; 487 } 488 default: { 489 nowsum += init; 490 } 491 } 492 if (isaheadchar) { 493 if (!isaheadsqr) 494 tv_cord.setText(tv_cord.getText().subSequence(0, tv_cord.getText().length() - 1)); 495 calcul = '/'; 496 } 497 if (!isaheadequal) { 498 if (!isaheadchar) 499 tv_cord.setText(tv_cord.getText() + "" + init + "÷"); 500 else tv_cord.setText(tv_cord.getText() + "÷"); 501 tv_calcul.setText("" + nowsum); 502 } else { 503 tv_cord.setText("" + nowsum + "÷"); 504 tv_calcul.setText("" + nowsum); 505 } 506 calcul = '/'; 507 init = 0; 508 isaheadequal = false; 509 isaheadchar = true; 510 isaheadsqr = false; 511 isnowpoint = false; 512 pointnum = 0; 513 } 514 }); 515 btn_rem.setOnClickListener(new View.OnClickListener() { 516 @Override 517 public void onClick(View v) { 518 if (isaheadequal) { 519 tv_cord.setText(""); 520 } 521 switch (calcul) { 522 case '+': { 523 nowsum += init; 524 arr.add(nowsum); 525 526 break; 527 } 528 case '-': { 529 nowsum -= init; 530 arr.add(nowsum); 531 532 break; 533 } 534 case '*': { 535 nowsum *= init; 536 arr.add(nowsum); 537 538 break; 539 } 540 case '/': { 541 if (init != 0) { 542 nowsum /= init; 543 arr.add(nowsum); 544 } else 545 Toast.makeText(getApplicationContext(), "不能除0!", Toast.LENGTH_LONG).show(); 546 break; 547 } 548 case '士': { 549 nowsum *= -1; 550 arr.add(nowsum); 551 break; 552 } 553 case '%': { 554 nowsum %= init; 555 arr.add(nowsum); 556 break; 557 } 558 default: { 559 } 560 } 561 if (!isaheadequal) { 562 tv_cord.setText(tv_cord.getText() + "" + init + "%"); 563 tv_calcul.setText("" + nowsum); 564 } else { 565 tv_cord.setText("" + nowsum + "%"); 566 tv_calcul.setText("" + nowsum); 567 isaheadequal = false; 568 } 569 calcul = '%'; 570 init = 0; 571 isnowpoint = false; 572 pointnum = 0; 573 } 574 }); 575 btn_neg.setOnClickListener(new View.OnClickListener() { 576 @Override 577 public void onClick(View v) { 578 double nowcal = Double.parseDouble(tv_calcul.getText().toString()); 579 nowcal *= -1; 580 init = nowcal; 581 tv_calcul.setText("" + init); 582 isnowpoint = false; 583 pointnum = 0; 584 } 585 }); 586 btn_point.setOnClickListener(new View.OnClickListener() { 587 @Override 588 public void onClick(View v) { 589 isnowpoint = true; 590 } 591 }); 592 btn_equal.setOnClickListener(new View.OnClickListener() { 593 @Override 594 public void onClick(View v) { 595 if (isaheadequal) { 596 tv_cord.setText(""); 597 } 598 switch (calcul) { 599 case '+': { 600 nowsum += init; 601 arr.add(nowsum); 602 break; 603 } 604 case '-': { 605 nowsum -= init; 606 arr.add(nowsum); 607 break; 608 } 609 case '*': { 610 nowsum *= init; 611 arr.add(nowsum); 612 613 break; 614 } 615 case '/': { 616 if (init != 0) { 617 nowsum /= init; 618 arr.add(nowsum); 619 } else 620 Toast.makeText(getApplicationContext(), "不能除0!", Toast.LENGTH_LONG).show(); 621 break; 622 } 623 case '士': { 624 nowsum *= -1; 625 arr.add(nowsum); 626 break; 627 } 628 case '%': { 629 nowsum %= init; 630 arr.add(nowsum); 631 break; 632 } 633 default: { 634 nowsum = init; 635 } 636 } 637 if (!isaheadsqr) 638 tv_cord.setText(tv_cord.getText() + "" + init + "="); 639 else tv_cord.setText(tv_cord.getText() + "="); 640 tv_calcul.setText("" + nowsum); 641 calcul = '#'; 642 init = 0; 643 isaheadequal = true; 644 isaheadsqr = false; 645 isnowpoint = false; 646 pointnum = 0; 647 } 648 }); 649 btn_ac.setOnClickListener(new View.OnClickListener() { 650 @Override 651 public void onClick(View v) { 652 tv_calcul.setText(""); 653 tv_cord.setText(""); 654 calcul = '#'; 655 init = 0; 656 nowsum = 0; 657 isaheadchar = false; 658 isnowpoint = false; 659 isaheadequal = false; 660 isaheadsqr = false; 661 pointnum = 0; 662 arr.removeAll(arr); 663 } 664 }); 665 btn_del.setOnClickListener(new View.OnClickListener() { 666 @Override 667 public void onClick(View v) { 668 669 if (!isnowpoint) 670 init = (int) init / 10; 671 else { 672 if (tv_calcul.getText().length() > 2) { 673 tv_calcul.setText(tv_calcul.getText().subSequence(0, tv_calcul.getText().length() - 1)); 674 init = Double.parseDouble(tv_calcul.getText().toString()); 675 } else { 676 isnowpoint = false; 677 pointnum = 0; 678 } 679 } 680 tv_calcul.setText("" + init); 681 } 682 }); 683 btn_pf.setOnClickListener(new View.OnClickListener() { 684 @Override 685 public void onClick(View v) { 686 double ptr; 687 double nowcal = Double.parseDouble(tv_calcul.getText().toString()); 688 nowcal *= nowcal; 689 ptr = init; 690 init = nowcal; 691 tv_calcul.setText("" + init); 692 tv_cord.setText(tv_cord.getText() + "" + ptr + "²"); 693 isaheadsqr = true; 694 isaheadchar = true; 695 pointnum = 0; 696 } 697 }); 698 btn_sqrt.setOnClickListener(new View.OnClickListener() { 699 @Override 700 public void onClick(View v) { 701 double ptr; 702 double nowcal = Double.parseDouble(tv_calcul.getText().toString()); 703 nowcal = sqrt(nowcal); 704 ptr = init; 705 init = nowcal; 706 tv_calcul.setText("" + init); 707 tv_cord.setText(tv_cord.getText() + "√" + ptr); 708 isaheadsqr = true; 709 isaheadchar = true; 710 pointnum = 0; 711 } 712 }); 713 btn_back.setOnClickListener(new View.OnClickListener() { 714 @Override 715 public void onClick(View v) { 716 if (arr.size()>=1) { 717 Log.d("A","111"); 718 arr.remove(arr.size()-1); 719 nowsum = arr.get(arr.size()-1); 720 init = 0; 721 tv_cord.setText("" + nowsum); 722 tv_calcul.setText("" + nowsum); 723 } 724 } 725 }); 726 727 } 728 }