android studio實現(xiàn)簡單的計算器(無bug)
本文實例為大家分享了android studio實現(xiàn)簡單計算器的具體代碼,供大家參考,具體內(nèi)容如下
1.效果圖

2布局代碼
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/jsj1"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="計算器" android:textSize="20dp" android:gravity="center" android:textColor="#EE4000"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="輸入數(shù)字"/> <EditText android:id="@+id/ET001" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="運算結(jié)果"/> <EditText android:id="@+id/ET002" android:layout_width="match_parent" android:layout_height="wrap_content"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_marginLeft="5dp" android:id="@+id/btn001" android:layout_width="88dp" android:layout_height="100dp" android:text="C" android:textSize="20dp" android:padding="5dp" android:background="@drawable/qqqqqqqqqq"/> <Button android:id="@+id/btn002" android:layout_width="88dp" android:layout_height="100dp" android:text="÷" android:textSize="20dp" android:padding="5dp" android:background="@drawable/qqqqqqqqqq"/> <Button android:id="@+id/btn003" android:layout_width="88dp" android:layout_height="100dp" android:text="×" android:textSize="20dp" android:padding="5dp" android:background="@drawable/qqqqqqqqqq"/> <Button android:id="@+id/btn004" android:layout_width="88dp" android:layout_height="100dp" android:text="Cx" android:textSize="20dp" android:padding="5dp" android:background="@drawable/qqqqqqqqqq"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_marginLeft="5dp" android:id="@+id/btn005" android:layout_width="88dp" android:layout_height="100dp" android:text="7" android:textSize="20dp" android:padding="5dp" android:background="@drawable/sssssssssssssss"/> <Button android:id="@+id/btn006" android:layout_width="88dp" android:layout_height="100dp" android:text="8" android:textSize="20dp" android:padding="5dp" android:background="@drawable/sssssssssssssss"/> <Button android:id="@+id/btn007" android:layout_width="88dp" android:layout_height="100dp" android:text="9" android:textSize="20dp" android:padding="5dp" android:background="@drawable/sssssssssssssss"/> <Button android:id="@+id/btn008" android:layout_width="88dp" android:layout_height="100dp" android:text="-" android:textSize="20dp" android:padding="5dp" android:background="@drawable/qqqqqqqqqq"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_marginLeft="5dp" android:id="@+id/btn009" android:layout_width="88dp" android:layout_height="100dp" android:text="4" android:textSize="20dp" android:padding="5dp" android:background="@drawable/sssssssssssssss"/> <Button android:id="@+id/btn0010" android:layout_width="88dp" android:layout_height="100dp" android:text="5" android:textSize="20dp" android:padding="5dp" android:background="@drawable/sssssssssssssss"/> <Button android:id="@+id/btn0011" android:layout_width="88dp" android:layout_height="100dp" android:text="6" android:textSize="20dp" android:padding="5dp" android:background="@drawable/sssssssssssssss"/> <Button android:id="@+id/btn0012" android:layout_width="88dp" android:layout_height="100dp" android:text="+" android:textSize="20dp" android:padding="5dp" android:background="@drawable/qqqqqqqqqq"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_marginLeft="5dp" android:id="@+id/btn0013" android:layout_width="88dp" android:layout_height="100dp" android:text="1" android:textSize="20dp" android:padding="5dp" android:background="@drawable/sssssssssssssss"/> <Button android:id="@+id/btn0014" android:layout_width="88dp" android:layout_height="100dp" android:text="2" android:textSize="20dp" android:padding="5dp" android:background="@drawable/sssssssssssssss"/> <Button android:id="@+id/btn0015" android:layout_width="88dp" android:layout_height="100dp" android:text="3" android:textSize="20dp" android:padding="5dp" android:background="@drawable/sssssssssssssss"/> <Button android:id="@+id/btn0019" android:layout_width="88dp" android:layout_height="100dp" android:text="." android:textSize="20dp" android:padding="5dp" android:background="@drawable/qqqqqqqqqq"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_marginLeft="5dp" android:id="@+id/btn0018" android:layout_width="88dp" android:layout_height="100dp" android:text="0" android:textSize="20dp" android:padding="5dp" android:background="@drawable/sssssssssssssss"/> <Button android:id="@+id/btn0016" android:layout_width="265dp" android:layout_height="100dp" android:text="=" android:textSize="20dp" android:padding="5dp" android:background="#6495ED"/> </LinearLayout> </LinearLayout>
3.邏輯代碼
package com.example.myzhuoye;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
public class JiSuanJi extends AppCompatActivity implements View.OnClickListener {
//結(jié)果
private EditText ET001,ET002;
//數(shù)字0-9
private Button btn0018, btn0013,btn0014,btn0015,btn009,btn0010,btn0011,btn005,btn006,btn007;
//運算符,+,-,×,÷,.,=;清除,返回
private Button btn0012,btn008,btn003,btn002,btn0019,btn0016,btn001,btn004;
private String text = "";//保存輸入的數(shù)字和符號
private Double result = 0.0;//輸出結(jié)果
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout4);
//結(jié)果
ET001=(EditText)findViewById(R.id.ET001);
ET002=(EditText)findViewById(R.id.ET002);
//數(shù)字0-9
btn0013=(Button)findViewById(R.id.btn0013);
btn0014=(Button)findViewById(R.id.btn0014);
btn0015=(Button)findViewById(R.id.btn0015);
btn009=(Button)findViewById(R.id.btn009);
btn0010=(Button)findViewById(R.id.btn0010);
btn0011=(Button)findViewById(R.id.btn0011);
btn005=(Button)findViewById(R.id.btn005);
btn006=(Button)findViewById(R.id.btn006);
btn007=(Button)findViewById(R.id.btn007);
btn0018=(Button)findViewById(R.id.btn0018);
//運算符
btn004=(Button)findViewById(R.id.btn004);
btn0012=(Button)findViewById(R.id.btn0012);
btn008=(Button)findViewById(R.id.btn008);
btn003=(Button)findViewById(R.id.btn003);
btn002=(Button)findViewById(R.id.btn002);
btn0019=(Button)findViewById(R.id.btn0019);
btn0016=(Button)findViewById(R.id.btn0016);
btn001=(Button)findViewById(R.id.btn001);
//添加點擊事件
btn0013.setOnClickListener((View.OnClickListener) this);
btn0014.setOnClickListener((View.OnClickListener) this);
btn0015.setOnClickListener((View.OnClickListener) this);
btn009.setOnClickListener((View.OnClickListener) this);
btn0010.setOnClickListener((View.OnClickListener) this);
btn0011.setOnClickListener((View.OnClickListener) this);
btn005.setOnClickListener((View.OnClickListener) this);
btn006.setOnClickListener((View.OnClickListener) this);
btn007.setOnClickListener((View.OnClickListener) this);
btn0018.setOnClickListener((View.OnClickListener) this);
btn0012.setOnClickListener((View.OnClickListener) this);
btn008.setOnClickListener((View.OnClickListener) this);
btn003.setOnClickListener((View.OnClickListener) this);
btn002.setOnClickListener((View.OnClickListener) this);
btn0019.setOnClickListener((View.OnClickListener) this);
btn0016.setOnClickListener((View.OnClickListener) this);
btn001.setOnClickListener((View.OnClickListener) this);
btn004.setOnClickListener((View.OnClickListener) this);
}
@Override
public void onClick(View v) {
String string=ET001.getText().toString();
switch (v.getId()){
case R.id.btn0018://0
num(0);
break;
case R.id.btn0013://1
num(1);
break;
case R.id.btn0014://2
num(2);
break;
case R.id.btn0015://3
num(3);
break;
case R.id.btn009://4
num(4);
break;
case R.id.btn0010://5
num(5);
break;
case R.id.btn0011://6
num(6);
break;
case R.id.btn005://7
num(7);
break;
case R.id.btn006://8
num(8);
break;
case R.id.btn007://9
num(9);
break;
case R.id.btn0019://.
dot();
break;
case R.id.btn0012://+
add();
break;
case R.id.btn008://-
sub();
break;
case R.id.btn003://"*"
multiply();
break;
case R.id.btn002://除
divide();
break;
case R.id.btn001://清除
clear();
break;
case R.id.btn004://返回
back();
break;
//計算結(jié)果
case R.id.btn0016://結(jié)果
result();
break;
default:
break;
}
ET001.setText(text);
ET002.setText(String.valueOf(result));
}
private void num(int i) {
text = text + String.valueOf(i);
}
private void dot() {
int a=text.length();
String s01="+";
String s02="-";
String s03="×";
String s04="÷";
String s05=".";
if (a!=0) {
String s=text.substring(a-1,a);
String s0=text.substring(0,a-1);
if (s01.equals(s) || s02.equals(s) || s03.equals(s) || s04.equals(s) || s05.equals(s)) {
text = s0+".";
}else {
text += ".";
}
} else {
text = "";
result =0.0;
ET001.setText("");
ET002.setText("");
}
}
private void clear() {
text = "";
result =0.0;
ET001.setText("");
ET002.setText("");
}
private void back() {
if (text.length()!=0){
String str = text.substring(0, text.length()-1);
text = str;
}
;
}
private void add() {
int a=text.length();
String s01="+";
String s02="-";
String s03="×";
String s04="÷";
String s05=".";
if (a!=0) {
String s=text.substring(a-1,a);
String s0=text.substring(0,a-1);
if (s01.equals(s) || s02.equals(s) || s03.equals(s) || s04.equals(s) || s05.equals(s)) {
text = s0+"+";
}else {
text += "+";
}
} else {
text = "";
result =0.0;
ET001.setText("");
ET002.setText("");
}
}
private void sub() {
int a=text.length();
String s01="+";
String s02="-";
String s03="×";
String s04="÷";
String s05=".";
if (a!=0) {
String s=text.substring(a-1,a);
String s0=text.substring(0,a-1);
if (s01.equals(s) || s02.equals(s) || s03.equals(s) || s04.equals(s) || s05.equals(s)) {
text = s0+"-";
}else {
text += "-";
}
} else {
text = "";
result =0.0;
ET001.setText("");
ET002.setText("");
}
}
private void multiply() {
int a=text.length();
String s01="+";
String s02="-";
String s03="×";
String s04="÷";
String s05=".";
if (a!=0) {
String s=text.substring(a-1,a);
String s0=text.substring(0,a-1);
if (s01.equals(s) || s02.equals(s) || s03.equals(s) || s04.equals(s) || s05.equals(s)) {
text = s0+"×";
}else {
text += "×";
}
} else {
text = "";
result =0.0;
ET001.setText("");
ET002.setText("");
}
}
private void divide() {
int a=text.length();
String s01="+";
String s02="-";
String s03="×";
String s04="÷";
String s05=".";
if (a!=0) {
String s=text.substring(a-1,a);
String s0=text.substring(0,a-1);
if (s01.equals(s) || s02.equals(s) || s03.equals(s) || s04.equals(s) || s05.equals(s)) {
text = s0+"÷";
}else {
text += "÷";
}
} else {
text = "";
result =0.0;
ET001.setText("");
ET002.setText("");
}
}
//計算輸出結(jié)果
private void result() {
result = testOperation(text);
}
public Double testOperation(String s){
//分割字符然后放進(jìn)數(shù)組
String s1 =s.replace("+","-");
String[] str = s1.split("-");
double total1=0;
//先遍歷數(shù)組,把里面的乘除結(jié)果算出來
for(String str1:str){
if(str1.contains("×")||str1.contains("÷")){
double total = 0;
for(int i =0;i<str1.length();){
int count =1;
a:for(int j =i+1;j<str1.length();j++){
char c =str1.charAt(j);
if(c=='×'||c=='÷'){
break a;
}else{
count++;
}
}
//將數(shù)字截取出來
String s2 =str1.substring(i,i+count);
double d = Double.parseDouble(s2);
if(i==0){
total = d;
}else{
char c1 = str1.charAt(i-1);
if(c1=='×'){
total*=d;
}else if(c1=='÷'){
//如果除數(shù)為0,直接返回null;
if(d == 0)
return null;
total/=d;
}
}
i+=count+1;
}
s= s.replace(str1, total+"");
}
}
//進(jìn)行加減運算
for(int i =0;i<s.length();i++){
int count =1;
a:for(int j=i+1;j<s.length();j++){
char c = s.charAt(j);
if(c=='+'||c=='-'){
break a;
}else{
count++;
}
}
String s3= s.substring(i,i+count);
double d2 = Double.parseDouble(s3);
if(i==0){
total1 = d2;
}else{
char c = s.charAt(i-1);
if(c=='+'){
total1+=d2;
}else if(c=='-'){
total1-=d2;
}
}
i+=count;
}
return total1;
}
}4.XML文件
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="#c0000000" android:endColor="#c0000000" android:angle="90" /><!--背景顏色漸變 angle為漸變角度--> <solid android:color=" #8DEEEE" /><!-- 背景填充顏色 --> <stroke android:width="0.5dp" android:color="#ff000000" /><!-- 描邊,邊框?qū)挾?、顏?--> <corners android:radius="0dp" /><!-- 邊角圓弧的半徑 --> <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" /><!-- 四周留出來的空白 --> </shape>
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="#c0000000" android:endColor="#c0000000" android:angle="90" /><!--背景顏色漸變 angle為漸變角度--> <solid android:color="#00FFFF" /><!-- 背景填充顏色 --> <stroke android:width="0.5dp" android:color="#ff000000" /><!-- 描邊,邊框?qū)挾取㈩伾?--> <corners android:radius="0dp" /><!-- 邊角圓弧的半徑 --> <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" /><!-- 四周留出來的空白 --> </shape>
關(guān)于計算器的精彩文章請查看《計算器專題》 ,更多精彩等你來發(fā)現(xiàn)!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android仿銀行客戶簽名并且保存簽名的截圖文件并命名為本地時間
本文通過實例代碼給大家介紹了Android仿銀行客戶簽名并且保存簽名的截圖文件并命名為本地時間,需要的朋友可以參考下2017-07-07
Android使用ViewPager實現(xiàn)自動輪播
這篇文章主要介紹了Android使用ViewPager實現(xiàn)自動輪播的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07
Android開發(fā)自定義控件之折線圖實現(xiàn)方法詳解
這篇文章主要介紹了Android開發(fā)自定義控件之折線圖實現(xiàn)方法,結(jié)合實例形式詳細(xì)分析了Android自定義控件中折線圖原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下2020-05-05
Android 組件Gallery和GridView示例講解
本文主要講解Android 組件Gallery和GridView,這里詳細(xì)介紹組件Gallery和GridView的知識要點,并附示例代碼和實現(xiàn)效果圖,有興趣的小伙伴可以參考下2016-08-08
android 修改launcher行數(shù)和列數(shù)的方法
這篇文章主要介紹了android 修改launcher行數(shù)和列數(shù)的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07
Android數(shù)據(jù)流之Channel和Flow實現(xiàn)原理和技巧詳解
在 Android 應(yīng)用程序的開發(fā)中,處理異步數(shù)據(jù)流是一個常見的需求,為了更好地應(yīng)對這些需求,Kotlin 協(xié)程引入了 Channel 和 Flow,它們提供了強大的工具來處理數(shù)據(jù)流,本文將深入探討 Channel 和 Flow 的內(nèi)部實現(xiàn)原理、高級使用技巧以及如何在 Android 開發(fā)中充分利用它們2023-11-11

