android studio實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器(無(wú)bug)
本文實(shí)例為大家分享了android studio實(shí)現(xiàn)簡(jiǎn)單計(jì)算器的具體代碼,供大家參考,具體內(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="計(jì)算器" 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="運(yùn)算結(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; //運(yùn)算符,+,-,×,÷,.,=;清除,返回 private Button btn0012,btn008,btn003,btn002,btn0019,btn0016,btn001,btn004; private String text = "";//保存輸入的數(shù)字和符號(hào) 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); //運(yùn)算符 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); //添加點(diǎn)擊事件 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; //計(jì)算結(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(""); } } //計(jì)算輸出結(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é)果算出來(lái) 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ù)字截取出來(lái) 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)行加減運(yù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" /><!-- 四周留出來(lái)的空白 --> </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" /><!-- 四周留出來(lái)的空白 --> </shape>
關(guān)于計(jì)算器的精彩文章請(qǐng)查看《計(jì)算器專題》 ,更多精彩等你來(lái)發(fā)現(xiàn)!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android掃描本地音樂(lè)文件開(kāi)發(fā)案例分享
這篇文章主要為大家分享了Android掃描本地音樂(lè)文件開(kāi)發(fā)案例,感興趣的小伙伴們可以參考一下2016-05-05Android實(shí)現(xiàn)底部彈出按鈕菜單升級(jí)版
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)底部彈出按鈕菜單的升級(jí)版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10Android音樂(lè)播放器簡(jiǎn)單實(shí)現(xiàn)案例
我們平時(shí)長(zhǎng)時(shí)間打代碼的時(shí)候肯定會(huì)感到疲憊和乏味,這個(gè)時(shí)候一邊播放自己喜歡的音樂(lè),一邊繼續(xù)打代碼,心情自然也愉快很多。音樂(lè)帶給人的聽(tīng)覺(jué)享受是無(wú)可比擬的,動(dòng)聽(tīng)的音樂(lè)可以愉悅?cè)说纳硇?,讓人更加積極地去熱愛(ài)生活,這篇文章主要介紹了Android音樂(lè)播放器簡(jiǎn)單實(shí)現(xiàn)案例2022-12-12Android使用AsyncTask實(shí)現(xiàn)多線程下載的方法
這篇文章主要介紹了Android使用AsyncTask實(shí)現(xiàn)多線程下載的方法,以完整實(shí)例形式詳細(xì)分析了Android使用AsyncTask實(shí)現(xiàn)多線程下載的功能代碼,界面布局及權(quán)限控制的具體方法,需要的朋友可以參考下2016-03-03Android Studio 透明狀態(tài)欄的實(shí)現(xiàn)示例
這篇文章主要介紹了Android Studio 透明狀態(tài)欄的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Android Studio 3.0中mipmap-anydpi-v26是什么東東
在Android Studio 3.0中一旦我們創(chuàng)建了一個(gè)項(xiàng)目,一個(gè)名為mipmap-anydpi-v26自動(dòng)創(chuàng)建的文件夾在res文件夾下。它究竟能干什么?為什么我們需要這個(gè)?我們?cè)陂_(kāi)發(fā)時(shí)該如何利用它,下面通過(guò)本文給大家介紹下2017-12-12android串口開(kāi)發(fā)入門(mén)之搭建ndk開(kāi)發(fā)環(huán)境及第一個(gè)jni調(diào)用程序
這篇文章主要給大家介紹了關(guān)于android串口開(kāi)發(fā)入門(mén)之搭建ndk開(kāi)發(fā)環(huán)境及第一個(gè)jni調(diào)用程序的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01