欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實現(xiàn)計算器(計算表達(dá)式/計算小數(shù)點以及括號)

 更新時間:2020年09月29日 11:12:05   作者:Bre zee  
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)計算器功能,計算表達(dá)式,能計算小數(shù)點以及括號,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Android實現(xiàn)計算器的具體代碼,供大家參考,具體內(nèi)容如下

布局代碼:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:stretchColumns="4"
 android:focusable="true"
 android:focusableInTouchMode="true"
 tools:context=".MainActivity">
 
 <TableRow
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:background="#aaaaaa">
 
 <LinearLayout
 android:layout_width="0dp"
 android:layout_height="200dp"
 android:layout_column="0"
 android:gravity="right"
 android:layout_weight="1">
 
 <EditText
 android:id="@+id/content_box"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_gravity="bottom|right"
 android:background="@null"
 android:hint="0"
 android:textSize="20pt" />
 </LinearLayout>
 </TableRow> <!--計算表達(dá)式輸入框-->
 
 <TableRow>
 
 <Button
 android:id="@+id/btn_c"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="0"
 android:layout_weight="1"
 android:text="C"
 android:textColor="#ff0000"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_ce"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="1"
 android:layout_weight="1"
 android:text="CE"
 android:textColor="#ff0000"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_aliquot"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="2"
 android:layout_weight="1"
 android:text="%"
 android:textColor="#ff0000"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_divide"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="3"
 android:layout_weight="1"
 android:text="/"
 android:textColor="#ff0000"
 android:textSize="12pt" />
 </TableRow>
 
 <TableRow>
 
 <Button
 android:id="@+id/btn_leftBracket"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="0"
 android:layout_span="1"
 android:layout_weight="1"
 android:text="("
 android:textColor="#ff0000"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_rightBracket"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="0"
 android:layout_span="1"
 android:layout_weight="1"
 android:text=")"
 android:textColor="#ff0000"
 android:textSize="12pt" />
 </TableRow>
 
 <TableRow>
 
 <Button
 android:id="@+id/btn_seven"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="0"
 android:layout_weight="1"
 android:text="7"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_eight"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="1"
 android:layout_weight="1"
 android:text="8"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_nine"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="2"
 android:layout_weight="1"
 android:text="9"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_multiply"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="3"
 android:layout_weight="1"
 android:text="*"
 android:textColor="#ff0000"
 android:textSize="12pt" />
 </TableRow>
 
 <TableRow>
 
 <Button
 android:id="@+id/btn_four"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="0"
 android:layout_weight="1"
 android:text="4"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_five"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="1"
 android:layout_weight="1"
 android:text="5"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_six"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="2"
 android:layout_weight="1"
 android:text="6"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_subtract"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="3"
 android:layout_weight="1"
 android:text="-"
 android:textColor="#ff0000"
 android:textSize="12pt" />
 </TableRow>
 
 <TableRow>
 
 <Button
 android:id="@+id/btn_one"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="0"
 android:layout_weight="1"
 android:text="1"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_two"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="1"
 android:layout_weight="1"
 android:text="2"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_three"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="2"
 android:layout_weight="1"
 android:text="3"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_add"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="3"
 android:layout_weight="1"
 android:text="+"
 android:textColor="#ff0000"
 android:textSize="12pt" />
 </TableRow>
 
 <TableRow>
 
 <Button
 android:id="@+id/btn_point"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="0"
 android:layout_weight="1"
 android:text="."
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_zero"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="1"
 android:layout_weight="1"
 android:text="0"
 android:textSize="12pt" />
 
 <Button
 android:id="@+id/btn_equal"
 android:layout_width="0dp"
 android:layout_height="70dp"
 android:layout_column="2"
 android:layout_weight="2"
 android:text="="
 android:textColor="#ff0000"
 android:textSize="12pt" />
 </TableRow>
 
 
</TableLayout>

Activicy代碼:

package com.example.newcalculator;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
import java.lang.reflect.Type;
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
 
 /*按鈕定義*/
 Button btn_one; //1
 Button btn_two; //2
 Button btn_three; //3
 Button btn_four; //4
 Button btn_five; //5
 Button btn_six; //6
 Button btn_seven; //7
 Button btn_eight; //8
 Button btn_nine; //9
 Button btn_zero; //0
 Button btn_c; //c
 Button btn_ce; //ce
 Button btn_aliquot; //%
 Button btn_divide; //除號
 Button btn_multiply;//x
 Button btn_subtract;//-
 Button btn_add; //+
 Button btn_point; //.
 Button btn_equal; //=
 Button btn_leftBracket;//(
 Button btn_rightBracket;//)
 EditText contentBox;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 initControls();
 initClickEvent();
 }
 
 
 //找到控件
 private void initControls() {
 btn_one = findViewById(R.id.btn_one);
 btn_two = findViewById(R.id.btn_two);
 btn_three = findViewById(R.id.btn_three);
 btn_four = findViewById(R.id.btn_four);
 btn_five = findViewById(R.id.btn_five);
 btn_six = findViewById(R.id.btn_six);
 btn_seven = findViewById(R.id.btn_seven);
 btn_eight = findViewById(R.id.btn_eight);
 btn_nine = findViewById(R.id.btn_nine);
 btn_zero = findViewById(R.id.btn_zero);
 btn_c = findViewById(R.id.btn_c);
 btn_ce = findViewById(R.id.btn_ce);
 btn_aliquot = findViewById(R.id.btn_aliquot);
 btn_divide = findViewById(R.id.btn_divide);
 btn_multiply = findViewById(R.id.btn_multiply);
 btn_subtract = findViewById(R.id.btn_subtract);
 btn_add = findViewById(R.id.btn_add);
 btn_point = findViewById(R.id.btn_point);
 btn_equal = findViewById(R.id.btn_equal);
 contentBox = findViewById(R.id.content_box);
 btn_leftBracket = findViewById(R.id.btn_leftBracket);
 btn_rightBracket = findViewById(R.id.btn_rightBracket);
 }
 
 @Override
 public void onClick(View view) {
 switch (view.getId()){
 case R.id.btn_one:{
 changeVal("1");
 }break;
 case R.id.btn_two:{
 changeVal("2");
 }break;
 case R.id.btn_three:{
 changeVal("3");
 }break;
 case R.id.btn_four:{
 changeVal("4");
 }break;
 case R.id.btn_five:{
 changeVal("5");
 }break;
 case R.id.btn_six:{
 changeVal("6");
 }break;
 case R.id.btn_seven:{
 changeVal("7");
 }break;
 case R.id.btn_eight:{
 changeVal("8");
 }break;
 case R.id.btn_nine:{
 changeVal("9");
 }break;
 case R.id.btn_zero:{
 changeVal("0");
 }break;
 case R.id.btn_aliquot:{
 changeVal("%");
 }break;
 case R.id.btn_divide:{
 changeVal("/");
 }break;
 case R.id.btn_multiply:{
 changeVal("*");
 }break;
 case R.id.btn_subtract:{
 changeVal("-");
 }break;
 case R.id.btn_add:{
 changeVal("+");
 }break;
 case R.id.btn_rightBracket:{
 changeVal(")");
 }break;
 case R.id.btn_leftBracket:{
 changeVal("(");
 }break;
 case R.id.btn_c:{
 funC();
 }break;
 case R.id.btn_ce:{
 funClearAll();
 }break;
 case R.id.btn_point:{
 changeVal(".");
 }break;
 case R.id.btn_equal:{
 String str = contentBox.getText().toString();
 Calculator calculator = new Calculator();
 Double result = calculator.Eval(str);
 contentBox.setText(result.toString());
 }break;
 }
 }
 private void changeVal(String flag){
 String str = contentBox.getText().toString();
 contentBox.setText(str+flag);
 }
 private void funC(){
 String str = contentBox.getText().toString();
 str = str.substring(0,str.length()-1);
 contentBox.setText(str);
 }
 private void funClearAll(){
 contentBox.setText("");
 }
 private void initClickEvent(){
 btn_one.setOnClickListener(this);
 btn_two.setOnClickListener(this);
 btn_three.setOnClickListener(this);
 btn_four.setOnClickListener(this);
 btn_five.setOnClickListener(this);
 btn_six.setOnClickListener(this);
 btn_seven.setOnClickListener(this);
 btn_eight.setOnClickListener(this);
 btn_nine.setOnClickListener(this);
 btn_zero.setOnClickListener(this);
 btn_aliquot.setOnClickListener(this);
 btn_divide.setOnClickListener(this);
 btn_multiply.setOnClickListener(this);
 btn_subtract.setOnClickListener(this);
 btn_point.setOnClickListener(this);
 btn_equal.setOnClickListener(this);
 btn_add.setOnClickListener(this);
 btn_c.setOnClickListener(this);
 btn_ce.setOnClickListener(this);
 btn_rightBracket.setOnClickListener(this);
 btn_leftBracket.setOnClickListener(this);
 }
}

計算表達(dá)式代碼:

package com.example.newcalculator;
 
import java.util.*;
 
//計算 2*(4+(88-86)/2)
 
 
//計算 2*(4+(88-86)/2)
 
class Caculater {
 private String[] sArry;//存分割后的字符串
 private Stack<String> houx = new Stack<String>();
 private Stack<String> fuhao = new Stack<String>();
 
 //結(jié)構(gòu)初始化
 Caculater(String str) {
 int i = str.length() - 1;
 String temp = "";
 int j = 0;
 Boolean bool = true;
 //在符號左右各添加一個#字符劃分
 while (true) {
 if (!bool) break;
 if (i == j) {
 bool = false;
 }
 if (str.charAt(j) == '+'
  || str.charAt(j) == '-'
  || str.charAt(j) == '*'
  || str.charAt(j) == '/'
  || str.charAt(j) == '('
  || str.charAt(j) == ')') {
 temp += '#';
 temp += str.charAt(j);
 temp += '#'; //填完后是2#*##(#4#+##(#88#-#86#)##/#32#)#
 } else {
 temp += str.charAt(j);
 }
 j++;
 }
 sArry = temp.split("#+");//用正則表達(dá)式分割成字符串,#+表示一個或多個#字符//結(jié)果:[2,*,(,4,+,(,88,-,85,),/,2,)]
 }
 
 //后序排列
 public void backsort() {
 //循環(huán)sArry
 for (int i = 0; i < sArry.length; i++) {
 //如果不是字符,就直接push入houx棧
 if (!sArry[i].equals("+")
  && !sArry[i].equals("-")
  && !sArry[i].equals("*")
  && !sArry[i].equals("/")
  && !sArry[i].equals("(")
  && !sArry[i].equals(")")) {
 houx.push(sArry[i]);
 continue;
 //否則是字符,若符號棧為空,直接入棧
 } else if (fuhao.isEmpty()) {
 fuhao.push(sArry[i]);
 continue;
 //如果為(括號,直接入符號棧
 } else if (sArry[i].equals("(")) {
 fuhao.push(sArry[i]);
 continue;
 //如果為)括號
 } else if (sArry[i].equals(")")) {
 /**
  * 不斷出棧直到(括號出現(xiàn)
  *
  */
 while (!fuhao.peek().equals("(")) {
  houx.push(fuhao.pop());
 }
 fuhao.pop();//清掉(括號
 //如果不為空,且要入的符號比符號棧頂?shù)姆杻?yōu)先級高,則直接push入符號棧
 } else if (!fuhao.isEmpty() && check(sArry[i], fuhao.peek())) { //
 fuhao.push(sArry[i]);
 continue;
 //否則,將符號棧內(nèi)優(yōu)先級高的符號出棧,push入houx棧,再將符號存進(jìn)符號棧
 } else {
 houx.push(fuhao.pop());
 fuhao.push(sArry[i]);
 continue;
 }
 }
 //遍歷完后,直接將符號棧內(nèi)的依次出棧,push入houx棧
 while (!fuhao.isEmpty()) {
 houx.push(fuhao.pop());
 }//結(jié)果是:2 4 88 86 - 2 / + * 棧內(nèi)順序
 }
 
 //check對比優(yōu)先級
 private boolean check(String a, String b) {
 //如果符號棧內(nèi)是(括號,直接返true
 if (b.equals("(")) {
 return true;
 }
 //如果符號棧內(nèi)的優(yōu)先級比要入的高,返回false
 if ((b.equals("*") || b.equals("/")) && (a.equals("+") || a.equals("-"))) { //b>a
 return false;
 }
 //。。。。。。。。。。。。。的低,返回true
 if ((b.equals("+") || b.equals("-")) && (a.equals("*") || a.equals("/"))) { //b<a
 return true;
 }
 return false;
 }
 
 //出棧計算
 public Double suan() {
 
 backsort();//后序排列
 
 //結(jié)果棧end
 Stack<Double> end = new Stack<Double>();
 //遍歷houx棧
 for (int i = 0; i < houx.size(); i++) {
 //如果是加號,end pop出來兩個數(shù)字,計算后結(jié)果入棧
 if (houx.get(i).equals("+")) {
 Double b = end.pop();
 Double a = end.pop();
 end.push(a + b);
 continue;
 //如果是減號,end pop出棧兩個數(shù)字,計算后結(jié)果入棧
 } else if (houx.get(i).equals("-")) {
 Double b = end.pop();
 Double a = end.pop();
 end.push(a - b);
 continue;
 //如果是乘號,end pop出棧兩個數(shù)字,計算后結(jié)果入棧
 } else if (houx.get(i).equals("*")) {
 Double b = end.pop();
 Double a = end.pop();
 end.push(a * b);
 continue;
 //如果是除號,end pop出棧兩個數(shù)字,計算后結(jié)果入棧
 } else if (houx.get(i).equals("/")) {
 Double b = end.pop();
 Double a = end.pop();
 end.push(a / b);
 continue;
 } else if (houx.get(i).isEmpty()) {
 
 continue;
 } else {
 //不是符號,也就是數(shù)字的情況,Integer.parseInt轉(zhuǎn)int型, push入棧
 end.push(Double.parseDouble(houx.get(i)));
 }
 
 }
 
 //輸出結(jié)果
 return end.pop();
 }
 
}
 
public class Calculator {
 static String str="";
 public Double Eval(String str){
 
 //結(jié)構(gòu)化
 Caculater cl = new Caculater(str);
 //計算
 Double result = cl.suan();
 return result;
 }
}

關(guān)于計算器的精彩文章請查看《計算器專題》 ,更多精彩等你來發(fā)現(xiàn)!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論