溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android studio怎么實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

發(fā)布時(shí)間:2021-05-07 14:22:12 來源:億速云 閱讀:249 作者:小新 欄目:移動(dòng)開發(fā)

這篇文章將為大家詳細(xì)講解有關(guān)Android studio怎么實(shí)現(xiàn)簡(jiǎn)單計(jì)算器,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

Android是什么

Android是一種基于Linux內(nèi)核的自由及開放源代碼的操作系統(tǒng),主要使用于移動(dòng)設(shè)備,如智能手機(jī)和平板電腦,由美國(guó)Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。

具體內(nèi)容如下

需求分析

在Android studio中設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器,實(shí)現(xiàn)連續(xù)的加減乘除運(yùn)算。

界面設(shè)計(jì)

采用網(wǎng)格GridLayout布局,設(shè)計(jì)了一個(gè)6行4列的網(wǎng)格,最上邊是一個(gè)EditText用來顯示用戶輸入的運(yùn)算數(shù)字和運(yùn)算符,以及相關(guān)的運(yùn)算結(jié)果,其占4列,文本框大小為50dip;依次往下的界面分別設(shè)置了數(shù)字和運(yùn)算符以及操作的按鈕,各行各列的每個(gè)按鈕的大小均設(shè)為26sp。

編程分析

設(shè)計(jì)了兩個(gè)文件:1、控制文件MainActivity.java,完成按鈕的處理事件以及實(shí)現(xiàn)加減乘除及其結(jié)果輸出的功能,主要包括:顯示activity_main.xml定義的用戶界面;與用戶界面程序中的組件建立關(guān)聯(lián),并分別為每個(gè)組件注冊(cè)并實(shí)現(xiàn)監(jiān)聽接口;根據(jù)具體輸入和條件進(jìn)行運(yùn)算并顯示結(jié)果等。2、布局文件activity_main.xml,完成計(jì)算器界面的網(wǎng)格布局設(shè)計(jì),包括了一個(gè)文本編輯框和18個(gè)按鈕。

具體進(jìn)度

第1天:對(duì)簡(jiǎn)單計(jì)算器進(jìn)行系統(tǒng)的功能和界面分析,形成自己大致的設(shè)計(jì)想法,然后根據(jù)老師建議的書本程序以及自己上網(wǎng)搜索的安卓項(xiàng)目的編程,系統(tǒng)地總結(jié)出自己編程的過程以及開始理解各類代碼。由于對(duì)移動(dòng)編程這門課還不是很熟悉,所以對(duì)其中編程部分的理解為自己往后調(diào)試程序有很大的幫助。

第2天:開始敲代碼。由于第一次在Android studio上面編程,對(duì)這個(gè)軟件的各項(xiàng)操作都不熟悉,所以剛開始就在軟件摸索上面花費(fèi)了較多的時(shí)間。由于此次設(shè)計(jì)的界面老師給了我們書本的模板,所以我選擇從簡(jiǎn)單的布局文件的設(shè)計(jì)開始編程,一方面也方便自己熟悉Android studio。

第3天:開始根據(jù)自己的理解和想法開始設(shè)計(jì)并調(diào)試控制文件的程序。由于這部分設(shè)計(jì)到多種函數(shù)以及接口的設(shè)計(jì)以及實(shí)現(xiàn),運(yùn)用的是java,由于對(duì)過去學(xué)的java語言有些遺忘了,而且現(xiàn)在還要涉及關(guān)于新知識(shí).xml的結(jié)合,所以在這部分花的時(shí)間比較長(zhǎng)。期間出現(xiàn)了較多的bug,雖然調(diào)試起來很吃力,但最終一點(diǎn)點(diǎn)把程序調(diào)試成功還是挺開心的。

第4天:原本以為程序調(diào)試成功就好了,但是沒想到最后在AVD的各種選擇和配置、調(diào)用問題上花了更多的時(shí)間和精力。由于第一次接觸Android studio,所以對(duì)其中很多配置都不了解,也是第一次聽說AVD,在最終運(yùn)行這個(gè)計(jì)算器APP的時(shí)候在AVD的選擇和配置失敗上卡了較長(zhǎng)時(shí)間,通過百度以及請(qǐng)教同學(xué),一步步地終于把最后這一步做好了。至此便完成了自己第一個(gè)簡(jiǎn)單APP的開發(fā)。

心得體會(huì)

這是我的第一個(gè)安卓項(xiàng)目開發(fā),這個(gè)計(jì)算器代碼的邏輯都比較簡(jiǎn)單,然后其功能也很不完善,是一個(gè)比較粗糙的設(shè)計(jì)。即便如此,由于自己對(duì)Android studio應(yīng)用程序設(shè)計(jì)的知識(shí)掌握得也不是很好,編程能力也比較弱,所以還是花了比較多的時(shí)間去研究和體會(huì)。但是,也正因?yàn)槠陂g遇到的很多困難和bug,在自己一點(diǎn)點(diǎn)去設(shè)法解決的過程中也對(duì)這門課程的理論知識(shí)以及相關(guān)操作都有了更清晰的了解,現(xiàn)在明白了其中和大致框架和原理,為往后深入的學(xué)習(xí)和編程做好多一點(diǎn)基礎(chǔ)鞏固。

Android studio怎么實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

控制文件MainActivity.java

package com.example.df.firstapp;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button; //引用按鈕組件
import android.widget.EditText; //引用文本編輯框組件
import android.text.TextUtils; //TextUtils類用于處理字符串
 
//定義實(shí)現(xiàn)監(jiān)聽接口的類MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
  //聲明17個(gè)按鈕和一個(gè)文本編輯框
  Button bt_num0,bt_num1,bt_num2,bt_num3,bt_num4,bt_num5,bt_num6,bt_num7,
bt_num8,bt_num9,bt_delete,bt_div,bt_mult,bt_minus,bt_plus,bt_equal,bt_dot,bt_clear;
 private EditText et_calc;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main); //顯示activity_main.xml定義的用戶界面
  initViewAndListener(); //調(diào)用函數(shù)initViewAndListener()
 }
 
 //定義函數(shù)initViewAndListener(),用于與用戶界面程序中的組件建立關(guān)聯(lián),并分別注冊(cè)監(jiān)聽接口
 private void initViewAndListener() { 
  bt_num0 = (Button)findViewById(R.id.bt_num0);
  bt_num0.setOnClickListener(this);
 
  bt_num1 = (Button)findViewById(R.id.bt_num1);
  bt_num1.setOnClickListener(this);
 
 
  bt_num2 =(Button) findViewById(R.id.bt_num2);
  bt_num2.setOnClickListener(this);
 
  bt_num3 = (Button)findViewById(R.id.bt_num3);
  bt_num3.setOnClickListener(this);
 
  bt_num4 = (Button)findViewById(R.id.bt_num4);
  bt_num4.setOnClickListener(this);
 
  bt_num5 = (Button)findViewById(R.id.bt_num5);
  bt_num5.setOnClickListener(this);
 
  bt_num6 = (Button)findViewById(R.id.bt_num6);
  bt_num6.setOnClickListener(this);
 
  bt_num7 = (Button)findViewById(R.id.bt_num7);
  bt_num7.setOnClickListener(this);
 
  bt_num8 = (Button)findViewById(R.id.bt_num8);
  bt_num8.setOnClickListener(this);
 
  bt_num9 = (Button)findViewById(R.id.bt_num9);
  bt_num9.setOnClickListener(this);
 
  bt_delete = (Button)findViewById(R.id.bt_delete);
  bt_delete.setOnClickListener(this);
 
  bt_div = (Button)findViewById(R.id.bt_div);
  bt_div.setOnClickListener(this);
 
  bt_mult = (Button)findViewById(R.id.bt_mult);
  bt_mult.setOnClickListener(this);
 
  bt_minus = (Button)findViewById(R.id.bt_minus);
  bt_minus.setOnClickListener(this);
 
 
  bt_plus = (Button)findViewById(R.id.bt_plus);
  bt_plus.setOnClickListener(this);
 
  bt_equal = (Button)findViewById(R.id.bt_equal);
  bt_equal.setOnClickListener(this);
 
  et_calc = (EditText)findViewById(R.id.et_calc);
 
  bt_dot = (Button)findViewById(R.id.bt_dot);
  bt_dot.setOnClickListener(this);
 
  bt_clear = (Button)findViewById(R.id.bt_clear);
  bt_clear.setOnClickListener(this);
 
 }
 
 private boolean lastIsOperator; //記錄當(dāng)前是否進(jìn)行計(jì)算操作
 private String lastOperators = ""; //記錄上一次進(jìn)行計(jì)算操作的結(jié)果
 
 private double firstNumber = 0D; //定義并初始化第一次的取值
 private double sencondNumber = 0D; //定義并初始化第二次的取值
 
 //onClick()方法,觸發(fā)OnClickListener接口
 public void onClick(View v) {
  String currentText = et_calc.getText().toString(); //獲取當(dāng)前文本編輯框的內(nèi)容
  String operatorNumber = ""; //定義并初始化操作數(shù)為””
  if (currentText.equals("0")) { //若當(dāng)前輸入數(shù)為0則設(shè)置文本編輯框?yàn)椤薄?
   et_calc.setText("");
  }
  operatorNumber = et_calc.getText().toString(); //根據(jù)編輯框的內(nèi)容更改操作數(shù)值
  if(!lastOperators.equals("")) //判斷上一次操作的數(shù)是否為空,非空則建立索引,隨之修改當(dāng)前操作數(shù)
  {
   int index = operatorNumber.lastIndexOf(lastOperators);
   operatorNumber = operatorNumber.substring(index+1);
  }
  
  //分別獲取按鈕的內(nèi)容至文本編輯框
  switch (v.getId()) {
   case R.id.bt_num0:
    et_calc.setText(et_calc.getText() + "0");
    lastIsOperator = false;
    break;
   case R.id.bt_num1:
    et_calc.setText(et_calc.getText() + "1");
    lastIsOperator = false;
    break;
   case R.id.bt_num2:
    et_calc.setText(et_calc.getText() + "2");
    lastIsOperator = false;
    break;
   case R.id.bt_num3:
    et_calc.setText(et_calc.getText() + "3");
    lastIsOperator = false;
    break;
   case R.id.bt_num4:
    et_calc.setText(et_calc.getText() + "4");
    lastIsOperator = false;
    break;
   case R.id.bt_num5:
    et_calc.setText(et_calc.getText() + "5");
    lastIsOperator = false;
    break;
   case R.id.bt_num6:
    et_calc.setText(et_calc.getText() + "6");
    lastIsOperator = false;
    break;
   case R.id.bt_num7:
    et_calc.setText(et_calc.getText() + "7");
    lastIsOperator = false;
    break;
   case R.id.bt_num8:
    et_calc.setText(et_calc.getText() + "8");
    lastIsOperator = false;
    break;
   case R.id.bt_num9:
    et_calc.setText(et_calc.getText() + "9");
    lastIsOperator = false;
    break;
   case R.id.bt_dot:
    et_calc.setText(et_calc.getText() + ".");
    lastIsOperator = false;
    break;
   //歸零按鈕,將當(dāng)前操作數(shù)直接清零
   case R.id.bt_clear:
    et_calc.setText("");
    lastIsOperator = false;
    firstNumber=0D;
    sencondNumber=0D;
    lastOperators="=";
    break;
   //清除按鈕,若當(dāng)前文本編輯框內(nèi)容為空,點(diǎn)擊一次則刪除一個(gè)字符串
   case R.id.bt_delete: 
    if (TextUtils.isEmpty(et_calc.getText())) {
     return;
    }
    lastIsOperator = false;
    et_calc.setText(currentText.substring(0, currentText.length() - 1).length() > 0 ? currentText.substring(0, currentText.length() - 1) : "0");
    break;
   //計(jì)算按鈕,若當(dāng)前內(nèi)容非空、或者以及上一次有操作記錄且記錄不是”=”的情況下,將當(dāng)前的操作記錄設(shè)置為+、-、*、/、=
   case R.id.bt_div:
    if ((TextUtils.isEmpty(et_calc.getText())
      || lastIsOperator) && !lastOperators.equals("=")) {
     return;
    }
    opratorCalc(operatorNumber,"÷");
    lastIsOperator = true;
    et_calc.setText(et_calc.getText() + "÷");
    lastOperators = "÷";
    break;
   case R.id.bt_mult:
    if ((TextUtils.isEmpty(et_calc.getText())
      || lastIsOperator) && !lastOperators.equals("=")) {
     return;
    }
    opratorCalc(operatorNumber,"*");
    lastIsOperator = true;
    et_calc.setText(et_calc.getText() + "*");
    lastOperators = "*";
    break;
   case R.id.bt_minus:
    if ((TextUtils.isEmpty(et_calc.getText())
      || lastIsOperator) && !lastOperators.equals("=")) {
     return;
    }
    opratorCalc(operatorNumber,"-");
    lastIsOperator = true;
    et_calc.setText(et_calc.getText() + "-");
    lastOperators = "-";
    break;
   case R.id.bt_plus:
    if ((TextUtils.isEmpty(et_calc.getText())
      || lastIsOperator) && !lastOperators.equals("=")) {
     return;
    }
    opratorCalc(operatorNumber,"+");
    lastIsOperator = true;
    et_calc.setText(et_calc.getText() + "+");
    lastOperators = "+";
    break;
   case R.id.bt_equal:
    double result = 0D;
    if(TextUtils.isEmpty(lastOperators))
    {
     return;
    }
    opratorResult(operatorNumber);
    sencondNumber = 0D;
    lastOperators ="=";
    lastIsOperator = true;
    et_calc.setText(et_calc.getText() + "\n=" + String.valueOf(firstNumber));
    break;
  }
 }
 
 //運(yùn)算函數(shù),按具體操作進(jìn)行+、-、*、/的運(yùn)算
 private void operate(String operatorNumber)
 {
  if(sencondNumber != 0D) //計(jì)算情況一:第二次輸入的數(shù)不為0
  {
   if(lastOperators.equals("÷"))
   {
    sencondNumber = sencondNumber / Double.parseDouble(operatorNumber);
    firstNumber = firstNumber / sencondNumber;
   }
   else if(lastOperators.equals("*"))
   {
    sencondNumber = sencondNumber * Double.parseDouble(operatorNumber);
    firstNumber = firstNumber * sencondNumber;
   }
   else if(lastOperators.equals("+"))
   {
    sencondNumber = Double.parseDouble(operatorNumber);
    firstNumber = firstNumber + sencondNumber;
   }
   else if(lastOperators.equals("-"))
   {
    sencondNumber = Double.parseDouble(operatorNumber);
    firstNumber = firstNumber - sencondNumber;
   }
  }
  Else //計(jì)算情況二:第二次輸入的數(shù)為0
  {
   if(lastOperators.equals("÷"))
   {
    firstNumber = firstNumber / Double.parseDouble(operatorNumber);
   }
   else if(lastOperators.equals("*"))
   {
    firstNumber = firstNumber * Double.parseDouble(operatorNumber);
   }
   else if(lastOperators.equals("+"))
   {
    firstNumber = firstNumber + Double.parseDouble(operatorNumber);
   }
   else if(lastOperators.equals("-"))
   {
    firstNumber= firstNumber - Double.parseDouble(operatorNumber);
   }
  }
 }
 //分別返回計(jì)算結(jié)果
public void opratorResult(String operatorNumber)
 {
  operate(operatorNumber);
 
}
//按當(dāng)前計(jì)算結(jié)果進(jìn)行下一次的數(shù)據(jù)輸入及計(jì)算
 public void opratorCalc(String operatorNumber,String currentOprator)
 {
  if(TextUtils.isEmpty(lastOperators))
  {
   firstNumber = Double.parseDouble(operatorNumber);
   return;
  }
 
  if(lastOperators.equals(currentOprator))
  {
   if(lastOperators.equals("÷"))
   {
    firstNumber = firstNumber / Double.parseDouble(operatorNumber);
   }
   else if(lastOperators.equals("*"))
   {
    firstNumber = firstNumber * Double.parseDouble(operatorNumber);
   }
   else if(lastOperators.equals("+"))
   {
    firstNumber = firstNumber + Double.parseDouble(operatorNumber);
   }
   else if(lastOperators.equals("-"))
   {
    firstNumber = firstNumber - Double.parseDouble(operatorNumber);
   }
 
   return;
  }
  operate(operatorNumber);
 
 }
 
}

布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<GridLayout 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:columnCount="4" //設(shè)置了一個(gè)4列6行的網(wǎng)格
 android:rowCount="6"
 tools:context=".MainActivity"> 
 
 <EditText
  android:id="@+id/et_calc"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_columnSpan="4" //該組件占據(jù)4列的位置
  android:layout_marginLeft="4px"
  android:gravity="left"
android:layout_row="0"
  android:background="#eee"
  android:textSize="50dip"/>
 
 <Button
  android:id="@+id/bt_delete"
  android:layout_column="3"
  android:layout_row="1"
  android:text="清除"
  android:textSize="26sp"/>
 
<Button
  android:id="@+id/bt_clear"
  android:layout_column="0"
  android:layout_row="1"
  android:text="歸零"
  android:textSize="26sp"/>
 
 <Button
  android:id="@+id/bt_num1"
  android:layout_column="0"
  android:layout_row="2"
  android:text="1" 
android:textSize="26sp"/>
 
 <Button
  android:id="@+id/bt_num2"
  android:layout_column="1"
  android:layout_row="2"
  android:text="2" 
android:textSize="26sp"/>
 
 <Button
  android:id="@+id/bt_num3"
  android:layout_column="2"
  android:layout_row="2"
  android:text="3" 
android:textSize="26sp"/>
 
 <Button
  android:id="@+id/bt_plus"
  android:layout_column="3"
  android:layout_row="2"
  android:text="+" 
android:textSize="26sp"/>
 
 <Button
  android:id="@+id/bt_num4"
  android:layout_column="0"
  android:layout_row="3"
  android:text="4"
android:textSize="26sp" />
 
 <Button
  android:id="@+id/bt_num5"
  android:layout_column="1"
  android:layout_row="3"
  android:text="5" 
android:textSize="26sp"/>
 
 <Button
  android:id="@+id/bt_num6"
  android:layout_column="2"
  android:layout_row="3"
  android:text="6" 
android:textSize="26sp"/>
 
 <Button
  android:id="@+id/bt_minus"
  android:layout_column="3"
  android:layout_row="3"
  android:text="-"
android:textSize="26sp" />
 
 <Button
  android:id="@+id/bt_num7"
  android:layout_column="0"
  android:layout_row="4"
  android:text="7" 
android:textSize="26sp"/>
 
 <Button
  android:id="@+id/bt_num8"
  android:layout_column="1"
  android:layout_row="4"
  android:text="8" 
android:textSize="26sp"/>
 
 <Button
  android:id="@+id/bt_num9"
  android:layout_column="2"
  android:layout_row="4"
  android:text="9"
android:textSize="26sp" />
 
 <Button
  android:id="@+id/bt_mult"
  android:layout_column="3"
  android:layout_row="4"
  android:text="*" 
android:textSize="26sp" />
 
 <Button
  android:id="@+id/bt_dot"
  android:layout_column="0"
  android:layout_row="5"
  android:text="."
android:textSize="26sp" />
 
 <Button
  android:id="@+id/bt_num0"
  android:layout_column="1"
  android:layout_row="5"
  android:text="0"
android:textSize="26sp" />
 
 <Button
  android:id="@+id/bt_equal"
  android:layout_column="2"
  android:layout_row="5"
  android:text="="
android:textSize="26sp" />
 
 <Button
  android:id="@+id/bt_div"
  android:layout_column="3"
  android:layout_row="5"
  android:text="/"
android:textSize="26sp" />
</GridLayout>

關(guān)于“Android studio怎么實(shí)現(xiàn)簡(jiǎn)單計(jì)算器”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI