欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

Android

當(dāng)前位置:主頁 > 軟件編程 > Android >

android實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:Android|點(diǎn)擊: 次

本文實(shí)例為大家分享了android實(shí)現(xiàn)簡(jiǎn)單計(jì)算器的具體代碼,供大家參考,具體內(nèi)容如下

// 日期:2014/9/26
 
// 首先,人們的輸入習(xí)慣為中綴表達(dá)式。為了便于計(jì)算,程序會(huì)將中綴表達(dá)式會(huì)轉(zhuǎn)換為后綴表達(dá)式
 
////////////////////////////////////////////////////////////////////////////////////////
// 目前軟件還存在
// 1.輸入運(yùn)算數(shù)和運(yùn)算符不匹配時(shí),崩潰的現(xiàn)象。(如:只輸入一個(gè)操作數(shù))
// 2.一個(gè)數(shù)字中重復(fù)輸入兩個(gè)小數(shù)點(diǎn)。(如4.5.6)
// 這兩個(gè)重大的bug,后續(xù)會(huì)繼續(xù)修改
 
////////////////////////////////////////////////////////////////////////////////////////
// 只有一種布局。這也會(huì)在后續(xù)考慮完善。
// 若有其他不完善的地方,請(qǐng)指正。(╯▽╰)
 
 
package com.example.countea;
 
import android.os.Bundle;                   //不太明白到底是啥
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
 
import android.widget.Toast;                 // 顯示版權(quán)信息
import java.util.Iterator;                  // 迭代器
import java.util.LinkedList;                 // 雙向列表
 
public class MainActivity extends Activity {
 private EditText content;
 private EditText operaline;
 private Double first_num = 0.0;              // 第一個(gè)操作數(shù)
 private Double sec_num  = 0.0;              // 第二個(gè)操作數(shù)
 //無法設(shè)置bool型變量?????
 private static int equal_flg = 0;             // 等號(hào)的狀態(tài):FALSE表示未按過等號(hào),TRUE表示已經(jīng)按過等號(hào)
 private double negative_mark = 0;             // 正負(fù)數(shù)標(biāo)記
 LinkedList<String> Infix = new LinkedList<String>();    // 對(duì)content進(jìn)行解析,即存放中綴表達(dá)式的鏈表
 LinkedList<String> Suffix = new LinkedList<String>();   // 存放后綴表達(dá)式的鏈表
 LinkedList<Double> Suffix_Num = new LinkedList<Double>(); // 存放后綴表達(dá)式的數(shù)字鏈表
 LinkedList<String> OP = new LinkedList<String>();     // 1.作為臨時(shí)存放運(yùn)算符的鏈表;2.存放后綴表達(dá)式的運(yùn)算符
 
 @Override
 protected void onCreate(Bundle savedInstanceState)
 {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 
 
 // 處理"c"清屏按鈕功能
 Button clear = (Button) findViewById(R.id.clear);
 clear.setOnClickListener(new OnClickListener() {
 
  @Override
  public void onClick(View v) 
  {
  // TODO Auto-generated method stub
  content = (EditText) findViewById(R.id.content);
  content.setText("");
  equal_flg = 0;
  
  first_num = 0.0;
  sec_num = 0.0;
  OP.clear();
  Suffix.clear();
  Suffix_Num.clear();
  operaline.setText("");
  operaline.setSelection(operaline.getText().length());
  }
 });
 
 // 處理CE刪除當(dāng)前操作按鈕功能
 Button current_clear = (Button) findViewById(R.id.current_clear);
   current_clear.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) 
  {
  // TODO Auto-generated method stub
  content = (EditText) findViewById(R.id.content);
  content.setText("");
  equal_flg = 0;
 
  first_num = 0.0;
  sec_num = 0.0;
  OP.clear();
  Suffix.clear();
  Suffix_Num.clear();
  }
 });
 
 // 處理back退格按鈕功能
 Button back = (Button) findViewById(R.id.back);
 back.setOnClickListener(new OnClickListener() {
 
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  content = (EditText) findViewById(R.id.content);
  String str = content.getText().toString();
  if (content.getText().length() != 0)
   content.setText(str.substring(0, str.length() - 1));
    content.setSelection(content.getText().length()); //暫時(shí)不知道有什么用,若編輯框?yàn)榭談t無需處理,驗(yàn)證是否會(huì)導(dǎo)致異常退出
  }
 });
 
 // 考慮對(duì)符號(hào)鍵和數(shù)字鍵是否需要分開實(shí)現(xiàn)
 // 實(shí)現(xiàn)對(duì)"0123456789.+-*/()"按鈕的監(jiān)聽;而對(duì)"="按鈕的監(jiān)聽則采用匿名內(nèi)部類的方法在onCreate()方法體內(nèi)進(jìn)行
 OnClickListener mylistener = new OnClickListener() 
 {
  @Override
  public void onClick(View v) {
  // TODO Auto-generated method stub
  Button num_btn = (Button) v;
  content = (EditText) findViewById(R.id.content);
 
  // 儲(chǔ)存界面運(yùn)算式
  String content_str = content.getText().toString();
  
  // 當(dāng)已經(jīng)有一次運(yùn)算時(shí),再次按“數(shù)字鍵”清除上次的結(jié)果
  if((1==equal_flg)/*&&(num_btn.getText().toString().equals("1")
   ||num_btn.getText().toString().equals("2")
   ||num_btn.getText().toString().equals("3")
   ||num_btn.getText().toString().equals("4")
   ||num_btn.getText().toString().equals("5")
   ||num_btn.getText().toString().equals("6")
   ||num_btn.getText().toString().equals("7")
   ||num_btn.getText().toString().equals("8")
   ||num_btn.getText().toString().equals("9")
   ||num_btn.getText().toString().equals("0"))*/)
  {
   content.setText("0");
   content.setSelection(content.getText().length());
   Toast.makeText(MainActivity.this,"還真執(zhí)行了!", Toast.LENGTH_LONG).show();
   equal_flg=0; 
  }
  
  // 重復(fù)輸入運(yùn)算符、括號(hào)或者“.”的處理
  if(("+".equals(content_str.substring(content_str.length()-1,content_str.length()))
   ||"-".equals(content_str.substring(content_str.length()-1,content_str.length()))
   ||"*".equals(content_str.substring(content_str.length()-1,content_str.length()))
   ||"/".equals(content_str.substring(content_str.length()-1,content_str.length()))
   ||".".equals(content_str.substring(content_str.length()-1,content_str.length())))&&((num_btn.getText().toString().equals("+")
   ||num_btn.getText().toString().equals("-")
   ||num_btn.getText().toString().equals("*")
   ||num_btn.getText().toString().equals("/")
   ||num_btn.getText().toString().equals("."))))
  {
   content_str=content_str.substring(0, content_str.length()-1);
   //Toast.makeText(MainActivity.this,"手抖了嗎?", Toast.LENGTH_LONG).show();
  } 
  
  // 重復(fù)按“.”的處理
  /*if(num_btn.getText().toString().equals("."))
  {
   // 如果界面只有數(shù)字,則改變當(dāng)前數(shù)字的符號(hào)
   if("0"!=content_str)
   {
   judge_str = turn_mark(judge_str);   
   content.setText(judge_str);
   content.setSelection(content.getText().length());
   // Toast.makeText(MainActivity.this,"GET", Toast.LENGTH_LONG).show();
   }
  }*/  
  
  // 不實(shí)現(xiàn)拼接
  // 當(dāng)前數(shù)據(jù)為0,下次輸入為非0數(shù)字或括號(hào)
  if("0".equals(content.getText().toString())
   &&!(num_btn.getText().toString().equals("+"))
   &&!(num_btn.getText().toString().equals("-"))
   &&!(num_btn.getText().toString().equals("*"))
   &&!(num_btn.getText().toString().equals("/"))
   &&!(num_btn.getText().toString().equals(".")))
  {
   // 強(qiáng)制轉(zhuǎn)換測(cè)試是否有危險(xiǎn)??????
   content_str = (String) num_btn.getText();
   //Toast.makeText(MainActivity.this,num_btn.getText(), Toast.LENGTH_LONG).show();
  }
  
  // 實(shí)現(xiàn)拼接
  // 當(dāng)前數(shù)據(jù)為0且下次輸入為運(yùn)算符或點(diǎn)號(hào)
  else
  {
   content_str += num_btn.getText();
   //Toast.makeText(MainActivity.this,content_str, Toast.LENGTH_LONG).show();
  }
  content.setText(content_str);
  content.setSelection(content.getText().length());
  }
 };
 
 // 無需特別處理的數(shù)字和符號(hào)按鈕
 Button num1 = (Button) findViewById(R.id.num_1);
 num1.setOnClickListener(mylistener);
 Button num2 = (Button) findViewById(R.id.num_2);
 num2.setOnClickListener(mylistener);
 Button num3 = (Button) findViewById(R.id.num_3);
 num3.setOnClickListener(mylistener);
 Button num4 = (Button) findViewById(R.id.num_4);
 num4.setOnClickListener(mylistener);
 Button num5 = (Button) findViewById(R.id.num_5);
 num5.setOnClickListener(mylistener);
 Button num6 = (Button) findViewById(R.id.num_6);
 num6.setOnClickListener(mylistener);
 Button num7 = (Button) findViewById(R.id.num_7);
 num7.setOnClickListener(mylistener);
 Button num8 = (Button) findViewById(R.id.num_8);
 num8.setOnClickListener(mylistener);
 Button num9 = (Button) findViewById(R.id.num_9);
 num9.setOnClickListener(mylistener);
 Button point = (Button) findViewById(R.id.point);
 point.setOnClickListener(mylistener);
 Button left = (Button) findViewById(R.id.left);
 left.setOnClickListener(mylistener);
 Button right = (Button) findViewById(R.id.right);
 right.setOnClickListener(mylistener);
 Button plus = (Button) findViewById(R.id.plus);
 plus.setOnClickListener(mylistener);
 Button subtract = (Button) findViewById(R.id.subs);
 subtract.setOnClickListener(mylistener);
 Button multiply = (Button) findViewById(R.id.multiply);
 multiply.setOnClickListener(mylistener);
 Button divide = (Button) findViewById(R.id.division);
 divide.setOnClickListener(mylistener);
 
 
 // 對(duì)按鈕0的處理
 Button num0 = (Button) findViewById(R.id.num_0);
 num0.setOnClickListener(new OnClickListener() 
 {
  @Override
  public void onClick(View v) 
  {
  content = (EditText) findViewById(R.id.content);
  // 當(dāng)前編輯框中的值為0
  if ("0".equals(content.getText().toString())||""== content.getText().toString())
  {
   content.setText("0");
  }
  // 編輯框已有非0數(shù)據(jù)
  else
  {
    String str = content.getText().toString();
     str += "0";
     content.setText(str);
  }
  content.setSelection(content.getText().length());
  // Toast.makeText(MainActivity.this,"GET", Toast.LENGTH_LONG).show();
  } 
 });
 
 // 對(duì)“-/+”的處理
 Button mark_sign = (Button) findViewById(R.id.mark_sign);
 mark_sign.setOnClickListener(new OnClickListener() 
 {
  @Override
  public void onClick(View v) 
  {
  
  content = (EditText) findViewById(R.id.content);
  String judge_str = content.getText().toString();
  
  // 如果界面只有數(shù)字,則改變當(dāng)前數(shù)字的符號(hào)
  if("0"!=judge_str&&((-1==judge_str.indexOf("+"))
   ||(-1==judge_str.indexOf("-")))
   ||(-1==judge_str.indexOf("*"))
   ||(-1==judge_str.indexOf("/"))
   ||(-1==judge_str.indexOf("("))
   ||(-1==judge_str.indexOf(")")))
  {
   judge_str = turn_mark(judge_str);   
   content.setText(judge_str);
   content.setSelection(content.getText().length());
   // Toast.makeText(MainActivity.this,"GET", Toast.LENGTH_LONG).show();
  }
  } 
 });
 // 實(shí)現(xiàn)"="按鈕的功能
 Button equal = (Button) findViewById(R.id.equal);
 equal.setOnClickListener(new OnClickListener() 
 {
  @Override
  public void onClick(View v) 
  {
  // TODO Auto-generated method stub
  content = (EditText) findViewById(R.id.content);
  operaline = (EditText) findViewById(R.id.operatline);
  // str_Infix為待轉(zhuǎn)換的中綴表達(dá)式
  String str_Infix = content.getText().toString();
  // 友好的界面提示處理
  String equate = str_Infix;
  equate += "=";
  operaline.setText(equate);
  operaline.setSelection(content.getText().length());
  // 調(diào)用Analysis函數(shù)對(duì)content進(jìn)行解析
  MainActivity.this.Analysis(str_Infix);      
  System.out.println(Infix);
  // 至此,中綴表達(dá)式已存放到Infix鏈表中
 
  Iterator<String> it = Infix.iterator();
  while (it.hasNext()) 
  {   
   String tmp_str = it.next();
   if (isNum(tmp_str)) 
   {
      // 如果是數(shù)字或小數(shù)點(diǎn)則直接進(jìn)入Suffix鏈表;
   Suffix.addLast(tmp_str);
   }
   // 如果不是數(shù)字或小數(shù)點(diǎn)的話;
   else 
   {
   int OP_level = OP.isEmpty() ? 0 : getLevel(OP.getLast());
   // tmp_str比OP的頂運(yùn)算符優(yōu)先級(jí)高則入OP
   if (getLevel(tmp_str) > OP_level) 
   {
    OP.addLast(tmp_str);
   }
   // tmp_str比OP的頂運(yùn)算符優(yōu)先級(jí)低
   else 
   {
    // tmp_str為")",則將OP一直出棧直到遇到"("
    if (getLevel(tmp_str) == -1) 
    {
    String temp_OP = OP.removeLast();
    while (getLevel(temp_OP) != -2) {
     Suffix.addLast(temp_OP);
     temp_OP = OP.removeLast();
    }
    }
    // tmp_str為"(",則直接入OP
    else if (getLevel(tmp_str) == -2) 
    {
    OP.addLast(tmp_str);
    }
    // tmp_str比OP_level優(yōu)先級(jí)低又不是"(" ")",
    // 則OP一直出棧直到OP為空或tmp_str比OP_level優(yōu)先級(jí)高
    else 
    {
    String str2 = OP.removeLast();
    while (getLevel(str2) >= OP_level) 
    {
     Suffix.addLast(str2);
     if (OP.isEmpty()) 
     {
     break;
     }
     str2 = OP.removeLast();
    }
    OP.addLast(tmp_str);
    }
   }
   }
  }
  Infix.clear();// 清空Infix鏈表
  // OP中剩余的元素出OP進(jìn)入Suffix
  while (!OP.isEmpty()) 
  {
   Suffix.addLast(OP.removeLast());
  }
  System.out.println(Suffix);
  // 至此,中綴表達(dá)式已全部轉(zhuǎn)化為后綴表達(dá)式Suffix
 
  // 后綴表達(dá)式的計(jì)算過程???未指定操作數(shù)時(shí) 默認(rèn)為0
  while (!(Suffix.isEmpty())) 
  {
   String count_str = Suffix.removeFirst();
   if (isOP(count_str)) 
   {
   char compare_ch = count_str.charAt(0);
   first_num = Suffix_Num.removeLast();
   sec_num = Suffix_Num.removeLast();
   switch (compare_ch) {
   case '*':
    Suffix_Num.addLast(sec_num * first_num);
    break;
   case '/':
    // 測(cè)試注意除數(shù)和被除數(shù)的順序
    if (first_num != 0) 
    {
    Suffix_Num.addLast(sec_num / first_num);
    break;
    } else 
    {
    content = (EditText) findViewById(R.id.content);
    // ?????無法再編輯框內(nèi),設(shè)置提示
    content.setText("∞");
    content.setSelection(content.getText().length());
    }
   case '+':
    Suffix_Num.addLast(sec_num + first_num);
    break;
   case '-':
    Suffix_Num.addLast(sec_num - first_num);
    break;
   }
   } 
   else 
   {
   Suffix_Num.addLast(Double.parseDouble(count_str));
   }
  }
  // 至此,求得的結(jié)果已在Suffix_Num列表中
  
  // 這部分的邏輯為 result 存放從Suffix_Num列表中取出的數(shù)據(jù),處理結(jié)果后顯示到界面上。
  Double result=Suffix_Num.removeFirst();
  String res_str=Double.toString(result);
  
  if("0".equals(res_str.substring(res_str.length()-1,res_str.length())))
  {
   if(".".equals(res_str.substring(res_str.length()-2,res_str.length()-1)))
   {
   res_str=res_str.substring(0,res_str.length()-2);
   //Toast.makeText(MainActivity.this,res_str, Toast.LENGTH_LONG).show();
   };
  };
    content.setText(res_str);
    content.setSelection(content.getText().length());
    equal_flg = 1;
    if("-".equals(res_str.substring(0,1)))
   res_str=turn_mark(res_str);
  }
 });
 // 操作數(shù)清空?????android有自動(dòng)釋放機(jī)制?
 first_num = 0.0;
 sec_num = 0.0;
 OP.clear();
 Suffix.clear();
 Suffix_Num.clear();
 }
 
 // 自定義isNum()方法來檢測(cè)元素是否為數(shù)值
 public boolean isNum(String str) {
 int num = 0;
 for (int i = 0; i < str.length(); i++) {
  String strr = str.substring(i, i + 1);
  if (strr.equals("0") || strr.equals("1") || strr.equals("2")
   || strr.equals("3") || strr.equals("4") || strr.equals("5")
   || strr.equals("6") || strr.equals("7") || strr.equals("8")
   || strr.equals("9") || strr.equals("."))
  num = num + 1;
 }
 if (num == str.length())
  return true;
 else
  return false;
 }
 
 // 自定義isOP()方法來檢測(cè)Suffix列表的元素是否為運(yùn)算符
 public boolean isOP(String strr) {
 if (strr.equals("+") || strr.equals("-") || strr.equals("*")
  || strr.equals("/"))
  return true;
 else
  return false;
 }
 
 // 定義運(yùn)算符的等級(jí)
 public int getLevel(String str) {
 if (str.equals("*") || str.equals("/")) {
  return 2;
 } else if (str.equals("+") || str.equals("-")) {
  return 1;
 } else if (str.equals("(")) {
  return -2;
 } else if (str.equals(")")) {
  return -1;
 } else {
  return 0;
 }
 }
  
 // 改變正負(fù)號(hào)
 public String turn_mark(String str) 
 {
 String temp = "(";
 temp += "-";
 temp += str;
 temp += ")";
 str = temp;
 return str;
 }
 
 // 實(shí)現(xiàn)對(duì)編輯框內(nèi)容以數(shù)字和操作符分開儲(chǔ)存
 public void Analysis(String str) {
 String sub = "";
 
 for (int i = 0; i < str.length(); i++) 
 {
  // 用substring遍歷需要解析的數(shù)組
  String strr = str.substring(i, i + 1);
  if (isNum(strr)) 
  {
  sub += strr;
  }
  else 
  {
  if (sub != "")
  {
   Infix.addLast(sub);  // 首先sub進(jìn)Infix
   sub = "";       // 將sub清空
  }
  Infix.addLast(strr);   // "+-*/" "(" ")" 則直接進(jìn)Infix表
  }
 }
 // ?????測(cè)試for下面的IF是否是因?yàn)檠h(huán)無法判斷最后一個(gè)數(shù)
 if (isNum(str.substring(str.length() - 1))) {
  Infix.addLast(sub);      // 首先sub進(jìn)Infix
  sub = "";           // 將sub清空
 }
 
 }
 
 @Override
 public boolean onCreateOptionsMenu(Menu menu) 
 {
 /*
  * // Inflate the menu; this adds items to the action bar if it is
  * present. getMenuInflater().inflate(R.menu.main, menu);
  */
 menu.add(0, 1, 1, "退出");
 menu.add(0, 2, 2, "關(guān)于");
 menu.add(0, 3, 3, "幫助");
 return super.onCreateOptionsMenu(menu);
 /* return true; */
 }
 
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
 // TODO Auto-generated method stub
 //finish();
 if (item.getItemId() == 2) 
 {
  // 利用Toast來顯示提示信息
  Toast.makeText(MainActivity.this,"作者:歡  聯(lián)系:cdch@gmail.com", Toast.LENGTH_LONG).show();
 }
 if (item.getItemId() == 3) 
 {
  // 利用Toast來顯示提示信息
  Toast.makeText(MainActivity.this,"適用于一般算數(shù)運(yùn)算!", Toast.LENGTH_LONG).show();
 }
 
 return super.onOptionsItemSelected(item);
 };
 
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。

上一篇:Android 友盟第三方登錄與分享的實(shí)現(xiàn)代碼

欄    目:Android

下一篇:android實(shí)現(xiàn)記住用戶名和密碼以及自動(dòng)登錄

本文標(biāo)題:android實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能

本文地址:http://mengdiqiu.com.cn/a1/Android/9206.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有