Android實(shí)現(xiàn)簡易的計(jì)算器
本文實(shí)例為大家分享了Android實(shí)現(xiàn)簡易的計(jì)算器的具體代碼,供大家參考,具體內(nèi)容如下
布局(activity_main.xml)
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/GridLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:columnCount="4" android:orientation="horizontal" android:rowCount="6" > <EditText android:id="@+id/editText" android:layout_columnSpan="4" android:layout_gravity="fill" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:text="0" android:textSize="50sp" /> <Button android:id="@+id/clear" android:layout_columnSpan="1" android:layout_gravity="fill" android:text="清空" android:textColor="#FF4500" /> <Button android:id="@+id/back" android:layout_columnSpan="1" android:layout_gravity="fill" android:text="回退" android:textColor="#FF4500" /> <Button android:id="@+id/per" android:text="%" android:textColor="#FF4500" /> <Button android:id="@+id/div" android:text="÷" android:textColor="#FF4500" /> <Button android:id="@+id/b7" android:text="7" /> <Button android:id="@+id/b8" android:text="8" /> <Button android:id="@+id/b9" android:text="9" /> <Button android:id="@+id/mul" android:text="×" android:textColor="#FF4500" /> <Button android:id="@+id/b4" android:text="4" /> <Button android:id="@+id/b5" android:text="5" /> <Button android:id="@+id/b6" android:text="6" /> <Button android:id="@+id/sub" android:text="-" android:textColor="#FF4500" /> <Button android:id="@+id/b1" android:text="1" /> <Button android:id="@+id/b2" android:text="2" /> <Button android:id="@+id/b3" android:text="3" /> <Button android:id="@+id/plus" android:layout_width="wrap_content" android:text="+" android:textColor="#FF4500" /> <Button android:id="@+id/b00" android:text="00" /> <Button android:id="@+id/b0" android:text="0" /> <Button android:id="@+id/dot" android:text="." /> <Button android:id="@+id/equ" android:text="=" android:background="#008B8B" /> </GridLayout>
響應(yīng)及計(jì)算(MainActivity)
package com.mylayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText editText;
//數(shù)字0-9
private Button b1;
private Button b2;
private Button b3;
private Button b4;
private Button b5;
private Button b6;
private Button b7;
private Button b8;
private Button b9;
private Button b0;
private Button b00;
//運(yùn)算符
private Button per;
private Button add;// +
private Button sub; // -
private Button mul; // *
private Button div; // /
private Button dot; //小數(shù)點(diǎn)
private Button equ; // =
private boolean back; //退格
private boolean clear_bool= true;//清空
private boolean dot_flag1 = true;
private boolean dot_flag2 = true;
@Override
public void onClick(View view) {
String input = editText.getText().toString();
switch (view.getId()){
case R.id.b0:
case R.id.b1:
case R.id.b2:
case R.id.b3:
case R.id.b4:
case R.id.b5:
case R.id.b6:
case R.id.b7:
case R.id.b8:
case R.id.b9:
case R.id.b00:
if(dot_flag1)dot_flag2 = true;
if(clear_bool)
{
clear_bool = false;
editText.setText(""+((Button)view).getText());
}
else
{
editText.setText(input + ((Button)view).getText());//結(jié)果集就為本身
}
break;
case R.id.dot:
if(dot_flag1&&dot_flag2)
{
dot_flag1 = false;
dot_flag2 = false;
editText.setText(input + ((Button)view).getText());
}
break;
case R.id.per:
case R.id.plus:
case R.id.sub:
case R.id.mul:
case R.id.div:
dot_flag1 = true;
if(clear_bool)
{
clear_bool = false;
input = "";
editText.setText("");
}
editText.setText(input + ((Button)view).getText()+" ");
break;
case R.id.back: //退格
if(input != null || !input.equals("")) {
if(input.length()>1) {
editText.setText(input.substring(0, input.length() - 1));//
}
else{
clear_bool =true;
editText.setText("0");
}
}
break;
case R.id.clear: //清空
editText.setText("0");
clear_bool = true;
break;
case R.id.equ:
calculation();
break;
}
}
//計(jì)算結(jié)果
private void calculation() {
String s1 = editText.getText().toString(); //獲取字符串
if (s1 == null){
return;
}
boolean flag = false;
if(s1.charAt(0)=='-')
{
s1 = s1.substring(1);
flag = true;
}
String []num = s1.split("[-÷×+]"); //分割字符串獲得各個(gè)數(shù)字
double []n = new double[num.length];
for(int i=0;i<num.length;i++) //字符串轉(zhuǎn)數(shù)字
{
if(num[i].equals(""))continue;
//百分號
else if(num[i].contains("%")) n[i] = Double.parseDouble(num[i].replace("%",""))/100;
//開根
// else if(num[i].contains("√")) n[i] = Math.sqrt(Double.parseDouble(num[i].replace("√", "")));
else n[i] = Double.parseDouble(num[i]);
}
if(flag) n[0] -= n[0]*2; //負(fù)數(shù)情況
char[] sy = s1.replaceAll("[^-÷×+]","").toCharArray(); //獲得運(yùn)算符
int slen = sy.length;
if(sy.length == num.length)slen--;
char c = '+';
double result = n[0] ; //結(jié)果
if(n.length>1)
{
for (int j = 0; j < slen; j++) //先算乘除
{
if (sy[j] == '×')
{
n[j + 1] = n[j] * n[j + 1];
n[j] = 0;
if (c == '+') sy[j] = '+'; //判斷乘除的前一個(gè)運(yùn)算符是什么
else sy[j] = '-';
}
else if (sy[j] == '÷')
{
if (n[j + 1] != 0) n[j + 1] = n[j] / n[j + 1];
else n[j + 1] = 0;
n[j] = 0;
if (c == '+') sy[j] = '+';
else sy[j] = '-';
} else
c = sy[j];
}
result = n[0];
for (int j = 0; j < slen; j++) { //求和
if (sy[j] == '+') result += n[j + 1];
if (sy[j] == '-') result -= n[j + 1];
}
}
if((int)result == result )editText.setText((int)result+""); //顯示
else
{ //控制輸出小數(shù)點(diǎn)后6位
result = Double.parseDouble(String.format("%.6f", result));
editText.setText(result+"");
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//獲取id
View b1 = findViewById(R.id.b1);
View b2 = findViewById(R.id.b2);
View b3= findViewById(R.id.b3);
View b4 = findViewById(R.id.b4);
View b5 = findViewById(R.id.b5);
View b6 = findViewById(R.id.b6);
View b7 = findViewById(R.id.b7);
View b8 = findViewById(R.id.b8);
View b9 = findViewById(R.id.b9);
View b0 = findViewById(R.id.b0);
View b00 = findViewById(R.id.b00);
//運(yùn)算符
View plus = findViewById(R.id.plus);// +
View sub = findViewById(R.id.sub);// -
View mul = findViewById(R.id.mul);// *
View per = findViewById(R.id.per); // %
View div = findViewById(R.id.div); // /
View dot = findViewById(R.id.dot);//小數(shù)點(diǎn)
View equ = findViewById(R.id.equ);//=
View clear = findViewById(R.id.clear);//清空
View back = findViewById(R.id.back); //回退
editText = (EditText) findViewById(R.id.editText);//結(jié)果集
//添加監(jiān)聽事件
b0.setOnClickListener(this);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
b3.setOnClickListener(this);
b4.setOnClickListener(this);
b5.setOnClickListener(this);
b6.setOnClickListener(this);
b7.setOnClickListener(this);
b8.setOnClickListener(this);
b9.setOnClickListener(this);
b00.setOnClickListener(this);
per.setOnClickListener(this);
plus.setOnClickListener(this);
sub.setOnClickListener(this);
mul.setOnClickListener(this);
div.setOnClickListener(this);
dot.setOnClickListener(this);
equ.setOnClickListener(this);
clear.setOnClickListener(this);
back.setOnClickListener(this);
}
}
測試


關(guān)于計(jì)算器的精彩文章請查看《計(jì)算器專題》 ,更多精彩等你來發(fā)現(xiàn)!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中使用CircleImageView和Cardview制作圓形頭像的方法
這篇文章主要介紹了Android中使用CircleImageView和Cardview制作圓形頭像的方法,簡單介紹了CircleImageView和Cardview的使用,需要的朋友可以參考下2016-09-09
RecyclerView實(shí)現(xiàn)橫向滾動效果
這篇文章主要為大家詳細(xì)介紹了RecyclerView實(shí)現(xiàn)橫向滾動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01
Android 中ViewPager重排序與更新實(shí)例詳解
這篇文章主要介紹了Android 中ViewPager重排序與更新實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-07-07
Kotlin基礎(chǔ)通關(guān)之字符串與數(shù)字類型
這篇文章主要介紹了Kotlin基礎(chǔ)知識中的字符串與數(shù)字類型,編程中的入門知識,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Android設(shè)置PreferenceCategory背景顏色的方法
這篇文章主要介紹了Android設(shè)置PreferenceCategory背景顏色的方法,涉及Android設(shè)置背景色的技巧,需要的朋友可以參考下2015-05-05
Android的廣播Receiver動態(tài)注冊和靜態(tài)注冊示例
本篇文章主要介紹了Android的廣播Receiver動態(tài)注冊和靜態(tài)注冊示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
Android 自定義日期段選擇控件功能(開始時(shí)間-結(jié)束時(shí)間)
這篇文章主要介紹了Android 自定義日期段選擇控件功能,開始時(shí)間-結(jié)束時(shí)間。本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
Handler實(shí)現(xiàn)線程之間的通信下載文件動態(tài)更新進(jìn)度條
每一個(gè)線程對應(yīng)一個(gè)消息隊(duì)列MessageQueue,實(shí)現(xiàn)線程之間的通信,可通過Handler對象將數(shù)據(jù)裝進(jìn)Message中,再將消息加入消息隊(duì)列,而后線程會依次處理消息隊(duì)列中的消息。這篇文章主要介紹了Handler實(shí)現(xiàn)線程之間的通信下載文件動態(tài)更新進(jìn)度條,需要的朋友可以參考下2017-08-08

