GVKun编程网logo

android studio计算器实例【实测成功】(android studio计算器教程)

9

在本文中,我们将给您介绍关于androidstudio计算器实例【实测成功】的详细内容,并且为您解答androidstudio计算器教程的相关问题,此外,我们还将为您提供关于androidstudio

在本文中,我们将给您介绍关于android studio计算器实例【实测成功】的详细内容,并且为您解答android studio计算器教程的相关问题,此外,我们还将为您提供关于android studio 项目 :UI设计高精度实现简单计算器、android studio--简单的计算器实现、Android Studio—— 简易计算器实现、android studio修改配置文件夹(.android .gradle .AndroidStudio)位置的知识。

本文目录一览:

android studio计算器实例【实测成功】(android studio计算器教程)

android studio计算器实例【实测成功】(android studio计算器教程)

仅作为记录,大佬请跳过。

文章目录

  • 新建项目
  • 拖拉控件
  • 魔法棒控件
  • MainActivity.java写程序
  • 运行
  • *******************************
  • 关于android.getText()的数据类型转化

新建项目

建立android项目,可参考博主文章至第2步:

在这里插入图片描述

在这里插入图片描述

拖拉控件

1个button、2个Plain Text(两个数字输入)、3个TextView(+, =, 结果)

在这里插入图片描述

button:
(其中的onClick中的函数calculate,是后面在MainActivity.java里写的button点击函数)

在这里插入图片描述

Plain Text:(在程序中是EditBox:

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

TextView:

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

魔法棒控件

在这里插入图片描述

MainActivity.java写程序

所有程序

package com.example.a3calculator;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void calculate(View v){
        EditText number1=(EditText) findViewById(R.id.num1);
        EditText number2=(EditText) findViewById(R.id.num2);
        TextView result_total=(TextView) findViewById(R.id.result);

//        result_total.setText(number1.getText().toString());
//        double a=Double.valueOf(number1.getText().toString());
//        double b=Double.valueOf(number2.getText().toString());
//        double c=a+b;
        int a=Integer.valueOf(number1.getText().toString());
        int b=Integer.valueOf(number2.getText().toString());
        int c=a+b;

        result_total.setText(String.valueOf(c));

    }



}

运行

在这里插入图片描述

展示

在这里插入图片描述

*******************************

关于android.getText()的数据类型转化

参考:传送门

在这里插入图片描述

在这里插入图片描述

android studio 项目 :UI设计高精度实现简单计算器

android studio 项目 :UI设计高精度实现简单计算器

UI设计:

实验目的:

自主完成一个简单APP的设计工作,综合应用已经学到的Android UI设计技巧,重点注意合理使用布局。
实验要求:

  • 1.完成一个计算器的设计,可以以手机自带的计算器为参考。设计过程中,注意考虑界面的美观性,不同机型的适应性,以及功能的完备性。
  • 2.注意结合Activity的生命周期,考虑不同情况下计算器的界面状态。
  • 3.如有余力,可以考虑实现一个高精度科学计算型的计算器。

实现效果:

整数和浮点数的加减乘除、取余、开根号,异号、清零 计算结果全部实现。

精度保留到小数点后100位,比如下面是√3的计算结果。(可以自行修改精度)

完全满足日常使用,可以取代手机自带的计算器软件。。。

程序主要包含Mainactivity.javaCalculator.java activity_main.xml三个文件,分别用于控制、逻辑和视图。符合MVC框架。

文件结构:

代码:

MainActivity.java

package com.example.calculator;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView textView1,textView2,textView_op,textView_res;
    Calculator calculator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView1=(TextView) findViewById(R.id.textview_num1);
        textView2=(TextView)findViewById(R.id.textview_num2);
        textView_op=(TextView)findViewById(R.id.textview_op);
        textView_res=(TextView)findViewById(R.id.textview_res);

        Button t_C=(Button) findViewById(R.id.C);
        Button t_genhao=(Button) findViewById(R.id.genhao);
        Button t_quyu=(Button) findViewById(R.id.quyu);
        Button t_add=(Button) findViewById(R.id.add);

        Button t_num7=(Button) findViewById(R.id.num7);
        Button t_num8=(Button) findViewById(R.id.num8);
        Button t_num9=(Button) findViewById(R.id.num9);
        Button t_sub=(Button) findViewById(R.id.sub);

        Button t_num4=(Button) findViewById(R.id.num4);
        Button t_num5=(Button) findViewById(R.id.num5);
        Button t_num6=(Button) findViewById(R.id.num6);
        Button t_xinghao=(Button) findViewById(R.id.xinghao);

        Button t_num1=(Button) findViewById(R.id.num1);
        Button t_num2=(Button) findViewById(R.id.num2);
        Button t_num3=(Button) findViewById(R.id.num3);
        Button t_chuhao=(Button) findViewById(R.id.chuhao);

        Button t_jiahuojian=(Button) findViewById(R.id.jiahuojian);
        Button t_num0=(Button) findViewById(R.id.num0);
        Button t_dian=(Button) findViewById(R.id.dian);
        Button t_denhao=(Button) findViewById(R.id.denhao);

        calculator=new Calculator();

        View.OnClickListener buttonlistener=new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String show=((Button)view).getText().toString();
                calculator.process(show);
                textView1.setText(calculator.getSnum1());
                textView_op.setText(calculator.getSop());
                textView2.setText(calculator.getSnum2());
                textView_res.setText(calculator.getSres());
            }
        };
        t_num0.setOnClickListener(buttonlistener);
        t_num1.setOnClickListener(buttonlistener);
        t_num2.setOnClickListener(buttonlistener);
        t_num3.setOnClickListener(buttonlistener);
        t_num4.setOnClickListener(buttonlistener);
        t_num5.setOnClickListener(buttonlistener);
        t_num6.setOnClickListener(buttonlistener);
        t_num7.setOnClickListener(buttonlistener);
        t_num8.setOnClickListener(buttonlistener);
        t_num9.setOnClickListener(buttonlistener);

        t_C.setOnClickListener(buttonlistener);
        t_genhao.setOnClickListener(buttonlistener);
        t_quyu.setOnClickListener(buttonlistener);
        t_jiahuojian.setOnClickListener(buttonlistener);

        t_add.setOnClickListener(buttonlistener);
        t_sub.setOnClickListener(buttonlistener);
        t_xinghao.setOnClickListener(buttonlistener);
        t_chuhao.setOnClickListener(buttonlistener);

        t_dian.setOnClickListener(buttonlistener);
        t_denhao.setOnClickListener(buttonlistener);



    }


Calculator.java

package com.example.calculator;

import static java.math.BigDecimal.ROUND_HALF_UP;

import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;

public class Calculator {
    BigDecimal b1,b2,bres;
    boolean floatflag1,floatflag2;
    int scale;
    String snum1,snum2,sop,sres;
    enum state{state_i1,state_i2,state_init,state_res};
    state s;
    //enum operator{op_add,op_sub,op_mul,op_div,op_none}
    //operator op;

    public Calculator(){
        scale=100;
        floatflag1=false;
        floatflag2=false;
        clear();
    }
    public void process(String show)
    {
        if(show.charAt(0)>=''0''&& show.charAt(0)<=''9'')//输入数字
        {
            switch (s)
            {
                case state_init:
                    if(show.charAt(0)==''0'')break;
                    snum1=show;
                    s=state.state_i1;
                    break;
                case state_i1:
                    snum1+=show;
                    break;
                case state_i2:
                    snum2+=show;
                    break;
                case state_res:
                    clear();
                    process(show);
                    break;
            }
        }
        else//输入操作符
        {
            switch (show)
            {
                case "C":
                    clear();
                    break;
                case "+":
                    switch (s)
                    {
                        case state_init: sop=show;s=state.state_i2;
                        break;
                        case state_i1: sop=show;s=state.state_i2;
                        break;
                        case state_i2:
                            if(snum2=="")
                            {
                                sop=show;
                                break;
                            }
                            snum1=getres(2);snum2="";sres="";sop=show;
                            break;
                        case state_res:
                            if(sres.contains("error"))
                            {
                                clear();
                                break;
                            }
                            sop=show;snum1=sres;snum2="";sres="";s=state.state_i2;
                            break;
                    }
                    break;
                case "=":
                    switch (s)
                    {
                        case state_i1:
                            if(snum1.charAt(snum1.length()-1)==''.'')snum1+="0";
                            sres=snum1;
                            snum1="";
                            snum2="";
                            sop="";
                            s=state.state_res;
                            break;
                        case state_i2:

                            if(snum2=="")break;
                            if(snum2.charAt(snum2.length()-1)==''.'')break;
                            sres=getres(2);
                            snum1="";
                            snum2="";
                            sop="";
                            s=state.state_res;
                            break;
                        default:break;
                    }
                    break;
                case "-":
                    switch (s)
                    {
                        case state_init: sop=show;s=state.state_i2;
                            break;
                        case state_i1: sop=show;s=state.state_i2;
                            break;
                        case state_i2:
                            if(snum2=="")
                            {
                                sop=show;
                                break;
                            }
                            snum1=getres(2);snum2="";sres="";sop=show;
                            break;
                        case state_res:
                            if(sres.contains("error"))
                            {
                                clear();
                                break;
                            }
                            sop=show;snum1=sres;snum2="";sres="";s=state.state_i2;
                            break;
                    }
                    break;
                case "*":
                    switch (s)
                    {
                        case state_init: sop=show;s=state.state_i2;
                            break;
                        case state_i1: sop=show;s=state.state_i2;
                            break;
                        case state_i2:
                            if(snum2=="")
                            {
                                sop=show;
                                break;
                            }
                            snum1=getres(2);snum2="";sres="";sop=show;
                            break;
                        case state_res:
                            if(sres.contains("error"))
                            {
                                clear();
                                break;
                            }
                            sop=show;snum1=sres;snum2="";sres="";s=state.state_i2;
                            break;
                    }
                    break;
                case "/":
                    switch (s)
                    {
                        case state_init: sop=show;s=state.state_i2;
                            break;
                        case state_i1: sop=show;s=state.state_i2;
                            break;
                        case state_i2:
                            if(snum2=="")
                            {
                                sop=show;
                                break;
                            }
                            snum1=getres(2);snum2="";sres="";sop=show;
                            break;
                        case state_res:
                            if(sres.contains("error"))
                            {
                                clear();
                                break;
                            }
                            sop=show;snum1=sres;snum2="";sres="";s=state.state_i2;
                            break;
                    }
                    break;
                case "√":
                    switch (s)
                    {
                        case state_init: snum1="";snum2="";sop="";sres="0";s=state.state_res;
                            break;
                        case state_i1: sop=show;sres=getres(1);snum1="";snum2="";sop="";s=state.state_res;
                            break;
                        case state_i2:
                            if(snum2=="")break;
                            String t=snum1;snum1=snum2;
                            String t_op=sop;sop=show;
                            snum2=getres(1);
                            snum1=t;
                            sop=t_op;
                            sres="";
                            break;
                        case state_res:
                            if(sres.contains("error"))
                            {
                                clear();
                                break;
                            }
                            sop=show;
                            snum1=sres;
                            sres=getres(1);
                            snum1="";
                            sop="";
                            break;
                    }
                    break;
                case "%":
                    switch (s)
                    {
                        case state_init:
                            break;
                        case state_i1:
                            if(snum1.contains("."))break;
                            sop=show;s=state.state_i2;
                            break;
                        case state_i2:
                            if(snum2=="")
                            {
                                if(!snum1.contains("."))
                                sop=show;
                                break;
                            }
                            snum1=getres(2);snum2="";sres="";sop=show;
                            break;
                        case state_res:
                            if(sres.contains("error"))
                            {
                                clear();
                                break;
                            }
                            if(sres.contains("."))break;
                            sop=show;snum1=sres;snum2="";sres="";s=state.state_i2;
                            break;
                    }
                    break;
                case "+/-":
                    switch (s)
                    {
                        case state_init:
                            break;
                        case state_i1:
                            if(snum1.charAt(0)!=''-'')
                            snum1="-"+snum1;
                            else snum1=snum1.substring(1);
                            break;
                        case state_i2:
                            if(snum2=="")break;
                            if(snum2.charAt(0)!=''-'')
                                snum2="-"+snum2;
                            else snum2=snum2.substring(1);
                            break;
                        case state_res:
                            if(sres.contains("error"))
                            {
                                clear();
                                break;
                            }
                            if(sres.charAt(0)!=''-''&& !sres.equals(0))
                                sres="-"+sres;
                            else sres=sres.substring(1);
                            snum1=sres;
                            snum2="";
                            sres="";
                            sop="";
                            if(snum1.equals("0"))
                                s=state.state_init;
                            else
                            s=state.state_i1;
                            break;
                    }
                    break;
                case ".":
                    switch (s)
                    {
                        case state_init:
                            snum1+=show;
                            s=state.state_i1;
                            break;
                        case state_i1:
                            if(snum1.contains("."))break;
                            else snum1+=show;
                            break;
                        case state_i2:
                            if(snum2.equals("")){
                                if(sop.equals("%"))break;
                                snum2="0.";
                                break;
                            }
                            if(sop.equals("%")||snum2.contains("."))break;
                            else snum2+=show;
                            break;
                        case state_res:
                            break;
                    }
                    break;
            }
        }
    }

    public String getSnum1()
    {
        return  snum1;
    }
    public String getSnum2()
    {
        return snum2;
    }
    public String getSop()
    {
        return sop;
    }
    public String getSres()
    {
        return sres;
    }

    public void clear()
    {
        snum1="0";
        snum2="";
        sop="";
        sres="";
        s=state.state_init;
        b1=BigDecimal.valueOf(0);
        b2=BigDecimal.valueOf(0);
        bres=BigDecimal.valueOf(0);
    }
    public String getres(int flag)
    {
        String t="null";
        if(flag==1)
        {
            b1=new BigDecimal(snum1);
            if(snum1.equals("0"))return t="0";
            if(sop.equals("√"))
            {
                bres=sqrt(b1,scale);
                t=bres.toString();
                return  t;
            }
            else if(sop.equals("+/-"))
            {
                //略了,直接字符串处理
            }
        }
        else if(flag==2)
        {
            b1=new BigDecimal(snum1);
            b2=new BigDecimal(snum2);
            switch (sop)
            {
                case "+":
                    bres=b1.add(b2);
                    t=bres.toString();
                    break;
                case "-":
                    bres=b1.subtract(b2);
                    t=bres.toString();
                    break;
                case "*":
                    bres=b1.multiply(b2);
                    t=bres.toString();
                    break;
                case "/":
                    if(b2.equals(BigDecimal.valueOf(0)))return t="error: / by zero";
                    bres=b1.divide(b2,scale,RoundingMode.HALF_UP);
                    t=bres.toString();
                    break;
                case "%":
                    if(b2.equals(BigDecimal.valueOf(0)))return t="error: / by zero";
                    bres=b1.remainder(b2);
                    t=bres.toString();
                    break;
            }
        }
        return t;
    }


    public static BigDecimal sqrt(BigDecimal value, int scale){         //高精度浮点数开根号
        BigDecimal num2 = BigDecimal.valueOf(2);
        int precision = 100;
        MathContext mc = new MathContext(precision, RoundingMode.HALF_UP);
        BigDecimal deviation = value;
        int cnt = 0;
        while (cnt < precision) {
            deviation = (deviation.add(value.divide(deviation, mc))).divide(num2, mc);
            cnt++;
        }
        deviation = deviation.setScale(scale, BigDecimal.ROUND_HALF_UP);
        return deviation;
    }


}

布局文件:activity_main.xml

<?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">

    <TextView
        android:id="@+id/textview_num1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"

        android:text="0"
        android:textAlignment="textEnd"
        android:textColor="#009688"
        android:textSize="24sp"
        android:text/>
    <TextView
        android:id="@+id/textview_op"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"

        android:text=""
        android:textAlignment="textEnd"
        android:textColor="#009688"
        android:textSize="24sp"
        android:text/>
    <TextView
        android:id="@+id/textview_num2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"

        android:text=""
        android:textAlignment="textEnd"
        android:textColor="#009688"
        android:textSize="24sp"
        android:text/>

    <TextView
        android:id="@+id/textview_res"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"

        android:text=""
        android:textAlignment="textEnd"
        android:textColor="#009688"
        android:textSize="24sp"
        android:text/>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:id="@+id/C"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="C" />

        <Button
            android:id="@+id/genhao"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="√" />

        <Button
            android:id="@+id/quyu"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="%" />

        <Button
            android:id="@+id/add"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="+" />

    </LinearLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:id="@+id/num7"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="7" />

        <Button
            android:id="@+id/num8"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="8" />

        <Button
            android:id="@+id/num9"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="9" />

        <Button
            android:id="@+id/sub"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="-" />

    </LinearLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:id="@+id/num4"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="4" />

        <Button
            android:id="@+id/num5"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="5" />

        <Button
            android:id="@+id/num6"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="6" />

        <Button
            android:id="@+id/xinghao"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="*" />

    </LinearLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:id="@+id/num1"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="1" />

        <Button
            android:id="@+id/num2"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="2" />

        <Button
            android:id="@+id/num3"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="3" />

        <Button
            android:id="@+id/chuhao"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="/" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:id="@+id/jiahuojian"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="+/-" />

        <Button
            android:id="@+id/num0"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="0" />

        <Button
            android:id="@+id/dian"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="." />

        <Button
            android:id="@+id/denhao"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="=" />

    </LinearLayout>

</LinearLayout>

到此这篇关于android studio 项目 :UI设计高精度实现简单计算器的文章就介绍到这了,更多相关UI设计高精度实现简单计算器内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

您可能感兴趣的文章:
  • Android Studio实现带三角函数对数运算功能的高级计算器
  • Android Studio实现简易进制转换计算器
  • android studio实现简单的计算器小功能
  • Android studio实现简易计算器App功能
  • 用Android studio实现简易计算器功能
  • Android Studio实现简易计算器设计
  • Android studio实现简单的计算器
  • Android Studio实现简单计算器功能
  • Android Studio实现简易计算器(表格布局TableLayout)
  • Android Studio实现简易计算器App (Java语言版)

android studio--简单的计算器实现

android studio--简单的计算器实现

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/white"
    tools:context="com.example.jisuanqi.MainActivity">


    <TextView
        android:id="@+id/screenshow"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="@android:color/white"
        android:textColor="@color/black"
        android:textSize="50sp"/>


    //各按键

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center">


            <Button
                android:layout_width="160dp"
                android:layout_height="80dp"
                android:text="÷"
                android:textSize="45sp"
                android:id="@+id/divide"
                />
            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="×"
                android:textSize="45sp"
                android:id="@+id/times" />
            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="C"
                android:textSize="40sp"
                android:id="@+id/button_C" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center">

            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="7"
                android:textSize="40sp"
                android:id="@+id/button_7" />
            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="8"
                android:textSize="40sp"
                android:id="@+id/button_8" />
            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="9"
                android:textSize="40sp"
                android:id="@+id/button_9" />
            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="+"
                android:textSize="40sp"
                android:id="@+id/button_add" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center">

            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="4"
                android:textSize="40sp"
                android:id="@+id/button_4" />
            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="5"
                android:textSize="40sp"
                android:id="@+id/button_5" />
            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="6"
                android:textSize="40sp"
                android:id="@+id/button_6" />
            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="-"
                android:textSize="50sp"
                android:id="@+id/button_minus" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center">


            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="1"
                android:textSize="40sp"
                android:id="@+id/button_1" />
            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="2"
                android:textSize="40sp"
                android:id="@+id/button_2" />
            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="3"
                android:textSize="40sp"
                android:id="@+id/button_3" />
            <Button
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:text="."
                android:textSize="45sp"
                android:id="@+id/button_dot" />


        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center">

            <Button
                android:layout_width="160dp"
                android:layout_height="80dp"
                android:text="0"
                android:textSize="40sp"
                android:id="@+id/button_0" />



            <Button
                android:layout_width="160dp"
                android:layout_height="80dp"
                android:text="="
                android:textSize="45sp"
                android:id="@+id/button_equal" />

        </LinearLayout>
    </LinearLayout>
</LinearLayout>

java代码:

package com.example.jisuanqi;

import android.support.v4.app.INotificationSideChannel;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.app.Activity;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity  {
    private TextView windowshow;
    private Button   but_0,but_1,but_2,but_3,but_4,but_5,but_6,but_7,but_8,but_9,but_C,divide,
            multiply,but_add,but_minus,but_dot,but_equal;
    double first_num=0,second_num=0;
    double result=0;
    int operation=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        windowshow=(TextView)findViewById(R.id.screenshow);
        but_0=(Button)findViewById(R.id.button_0);
        but_0.setonClickListener(new MyOnClickListener());
        but_1=(Button)findViewById(R.id.button_1);
        but_1.setonClickListener(new MyOnClickListener());
        but_2=(Button)findViewById(R.id.button_2);
        but_2.setonClickListener(new MyOnClickListener());
        but_3=(Button)findViewById(R.id.button_3);
        but_3.setonClickListener(new MyOnClickListener());
        but_4=(Button)findViewById(R.id.button_4);
        but_4.setonClickListener(new MyOnClickListener());
        but_5=(Button)findViewById(R.id.button_5);
        but_5.setonClickListener(new MyOnClickListener());
        but_6=(Button)findViewById(R.id.button_6);
        but_6.setonClickListener(new MyOnClickListener());
        but_7=(Button)findViewById(R.id.button_7);
        but_7.setonClickListener(new MyOnClickListener());
        but_8=(Button)findViewById(R.id.button_8);
        but_8.setonClickListener(new MyOnClickListener());
        but_9=(Button)findViewById(R.id.button_9);
        but_9.setonClickListener(new MyOnClickListener());
        but_add=(Button)findViewById(R.id.button_add);
        but_add.setonClickListener(new MyOnClickListener());
        but_C=(Button)findViewById(R.id.button_C);
        but_C.setonClickListener(new MyOnClickListener());
        divide=(Button)findViewById(R.id.divide);
        divide.setonClickListener(new MyOnClickListener());
        but_dot=(Button)findViewById(R.id.button_dot);
        but_dot.setonClickListener(new MyOnClickListener());
        but_equal=(Button)findViewById(R.id.button_equal);
        but_equal.setonClickListener(new MyOnClickListener());
        but_minus=(Button)findViewById(R.id.button_minus);
        but_minus.setonClickListener(new MyOnClickListener());
        multiply=(Button)findViewById(R.id.times);
        multiply.setonClickListener(new MyOnClickListener());
    }

    class MyOnClickListener implements  View.OnClickListener{
        public void onClick(View v){
            switch (v.getId()){
                case R.id.button_C:
                    windowshow.setText(null);
                    break;
                case R.id.button_0:
                    String str0=windowshow.getText().toString();
                    str0+="0";
                    windowshow.setText(str0);
                    break;
                case R.id.button_1:
                    String str1=windowshow.getText().toString();
                    str1+="1";
                    windowshow.setText(str1);
                    break;
                case R.id.button_2:
                    String str2=windowshow.getText().toString();
                    str2+="2";
                    windowshow.setText(str2);
                    break;
                case R.id.button_3:
                    String str3=windowshow.getText().toString();
                    str3+="3";
                    windowshow.setText(str3);
                    break;
                case R.id.button_4:
                    String str4=windowshow.getText().toString();
                    str4+="4";
                    windowshow.setText(str4);
                    break;
                case R.id.button_5:
                    String str5=windowshow.getText().toString();
                    str5+="5";
                    windowshow.setText(str5);
                    break;
                case R.id.button_6:
                    String str6=windowshow.getText().toString();
                    str6+="6";
                    windowshow.setText(str6);
                    break;
                case R.id.button_7:
                    String str7=windowshow.getText().toString();
                    str7+="7";
                    windowshow.setText(str7);
                    break;
                case R.id.button_8:
                    String str8=windowshow.getText().toString();
                    str8+="8";
                    windowshow.setText(str8);
                    break;
                case R.id.button_9:
                    String str9=windowshow.getText().toString();
                    str9+="9";
                    windowshow.setText(str9);
                    break;
                case R.id.button_dot:
                    String strdot=windowshow.getText().toString();
                    strdot+=".";
                    windowshow.setText(strdot);
                    break;
                case R.id.button_add:
                    String sTradd=windowshow.getText().toString();
                    if(sTradd.equals(null)){
                        return;
                    }
                    first_num=Double.valueOf(sTradd);
                    sTradd+="+";
                    windowshow.setText(null);
                    operation=1;
                    break;
                case R.id.button_minus:
                    String strminus=windowshow.getText().toString();
                    if(strminus.equals(null)){
                        return;
                    }
                    first_num=Double.valueOf(strminus);
                    strminus+="-";
                    windowshow.setText(null);
                    operation=2;
                    break;
                case R.id.times:
                    String strmultiply=windowshow.getText().toString();
                    if(strmultiply.equals(null)){
                        return;
                    }
                    first_num=Double.valueOf(strmultiply);
                    strmultiply+="*";
                    windowshow.setText(null);
                    operation=3;
                    break;
                case R.id.divide:
                    String strdivide=windowshow.getText().toString();
                    if(strdivide.equals(null)){
                        return;
                    }
                    first_num=Double.valueOf(strdivide);
                    strdivide+="/";
                    windowshow.setText(null);
                    operation=4;
                    break;
                case R.id.button_equal:
                    String strequ=windowshow.getText().toString();
                    second_num=Double.valueOf(strequ);
                    // windowshow.setText(null);
                    switch (operation){
                        case 1:
                            result=first_num+second_num;
                            windowshow.setText(String.valueOf(first_num)+"+"+String.valueOf(second_num)+"="+String.valueOf(result));
                            break;
                        case 2:
                            result=first_num-second_num;
                            windowshow.setText(String.valueOf(first_num)+"-"+String.valueOf(second_num)+"="+String.valueOf(result));
                            break;
                        case 3:
                            result=first_num*second_num;
                            windowshow.setText(String.valueOf(first_num)+"×"+String.valueOf(second_num)+"="+String.valueOf(result));
                            break;
                        case 4:
                            if(second_num==0){
                                windowshow.setText("被除数不能为0!");
                            }
                            else {
                                result = first_num / second_num;
                                windowshow.setText(String.valueOf(first_num) + "÷" + String.valueOf(second_num) + "=" + String.valueOf(result));
                            }
                            break;
                        case 5:
                            result=first_num/100;
                            windowshow.setText(String.valueOf(first_num) + "%" +"="+String.valueOf(result));
                            break;

                        default:
                            result=0;
                            break;
                    }
            }

        }
    }
}

效果图: 

 

Android Studio—— 简易计算器实现

Android Studio—— 简易计算器实现

第一次写博客嘿嘿嘿,很激动,记录一下 Android 开发课第一次试验 —— 简易计算器。

P.S. 刚接触 Android Studio, 纯探索式完成,代码以及内容有些粗糙 QAQ

好啦,进入正题

首先是布局 activity_main.xml 文件,先上代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:ignore="LabelFor" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" tools:context=".MainActivity" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
    <EditText
        android:id="@+id/msg"
        android:inputType="number"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:autofillHints="" tools:targetApi="o">
    </EditText>
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/clc"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/borderlessButtonStyle"
        android:text="@string/clc"></Button>

    <Button
        android:id="@+id/mod"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/borderlessButtonStyle"
        android:text="@string/per"></Button>

    <Button
        android:id="@+id/div"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/borderlessButtonStyle"
        android:text="@string/div"></Button>

    <Button
        android:id="@+id/mul"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/borderlessButtonStyle"
        android:text="@string/mul"></Button>
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/seven"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/borderlessButtonStyle"
        android:text="@string/seven"></Button>

    <Button
        android:id="@+id/eight"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/borderlessButtonStyle"
        android:text="@string/eight"></Button>

    <Button
        android:id="@+id/nine"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/borderlessButtonStyle"
        android:text="@string/nine"></Button>

    <Button
        android:id="@+id/sub"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/borderlessButtonStyle"
        android:text="@string/sub"></Button>
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/four"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/borderlessButtonStyle"
        android:text="@string/four"></Button>

    <Button
        android:id="@+id/five"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/borderlessButtonStyle"
        android:text="@string/five"></Button>

    <Button
        android:id="@+id/six"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/borderlessButtonStyle"
        android:text="@string/six"></Button>

    <Button
        android:id="@+id/add"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        style="?android:attr/borderlessButtonStyle"
        android:text="@string/add"></Button>
</LinearLayout>

<LinearLayout android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:baselineAligned="false">
    <LinearLayout android:orientation="vertical"
        android:layout_weight="3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <LinearLayout android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:id="@+id/one"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                style="?android:attr/borderlessButtonStyle"
                android:text="@string/one"></Button>

            <Button
                android:id="@+id/two"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                style="?android:attr/borderlessButtonStyle"
                android:text="@string/two"></Button>

            <Button
                android:id="@+id/three"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                style="?android:attr/borderlessButtonStyle"
                android:text="@string/three"></Button>
        </LinearLayout>
        <LinearLayout android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:id="@+id/zero"
                android:layout_width="0px"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                style="?android:attr/borderlessButtonStyle"
                android:text="@string/zero"></Button>

            <Button
                android:id="@+id/dot"
                style="?android:attr/borderlessButtonStyle"
                android:layout_width="0px"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/dot"></Button>
        </LinearLayout>
    </LinearLayout>
    <LinearLayout android:orientation="vertical"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="match_parent">

        <Button
            android:id="@+id/equ"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            style="?android:attr/borderlessButtonStyle"
            android:text="@string/equ"></Button>
    </LinearLayout>
</LinearLayout>

</LinearLayout>

下面是 MainActivity.java 文件,主要分为四种键分开处理:C 键(单个字符清除键),= 键(EditText 获取所有表达式字符处理键),数字键以及操作符键: 首选是数字键(0~9),其主要实现把本身的 value(activity 中设置)传给 EditText 显示出来,由于代码基本一致,就先放一个例子:

  zero.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.append(zero.getText().toString());
        }
    });

其次是操作符键(+-*/.),其实现思路原本和数字键一样,但是不知道为什么 append 方法不适用于这些操作符,有大佬知道原因的话,烦请告知啊 QAQ,于是:

add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.setText(msg.getText()+"+");
        }
    });

之后是 C(单个字符清除键),其思路是假设 EditText 中有 n 个字符,先取出 n-1 个字符,再把第 n 位用 “ ” 代替,代码如下:

clc.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int count=0;//记录覆盖的空格的个数,由于空格也计入字符串长度中,对下面的每次删去的个数有影响,所以记录并在下面减去
            String  s = msg.getText().toString();
            for(int i=0;i<s.length();i++)
                if((s.substring(i,i+1)==""))
                    count++;
                //考虑边界情况
                if(count>=s.length()-1)
                    count = s.length()-1;
            s = (String) s.subSequence(0,s.length()-1-count);
            s = s.concat("");
            msg.setText(s);
        }
    });

最后是 = 键(表达式处理得出结果键),其思路是把中缀表达式转化成后缀表达式,在通过后缀表达式计算,代码如下(代码十分粗糙,由于只会 C,不大会 java,很多方法都是先查的 QAQ):

    equ.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int i = 0, j = 0, k = 0,count=1;//count 记录小数点后面有几位
            char b;
            String str=msg.getText().toString();
            double data[] = new double[100];//模拟数字栈
            String strr = "";//模拟操作符栈
            //入栈
            for (i = 0; i < str.length(); i++) {
                count=1;
                data[j]=0;
                //首先判断是都是数字,注意多位数的情况
                while ((i < str.length()) && (str.substring(i, i + 1).equals("0") || str.substring(i, i + 1).equals("1") || str.substring(i, i + 1).equals("2") || str.substring(i, i + 1).equals("3") || str.substring(i, i + 1).equals("4") || str.substring(i, i + 1).equals("5") || str.substring(i, i + 1).equals("6") || str.substring(i, i + 1).equals("7") || str.substring(i, i + 1).equals("8") || str.substring(i, i + 1).equals("9")) && (j < 100)) {
                    data[j] = data[j] * 10 + Integer.parseInt(str.substring(i, i + 1));
                    i++;
                }
                j++;
                //考虑操作数是小数的情况
                if((i < str.length()) &&(str.substring(i,i+1).equals(".")))
                {
                    i++;
                    j--;
                    while ((i < str.length()) && (str.substring(i, i + 1).equals("0") || str.substring(i, i + 1).equals("1") || str.substring(i, i + 1).equals("2") || str.substring(i, i + 1).equals("3") || str.substring(i, i + 1).equals("4") || str.substring(i, i + 1).equals("5") || str.substring(i, i + 1).equals("6") || str.substring(i, i + 1).equals("7") || str.substring(i, i + 1).equals("8") || str.substring(i, i + 1).equals("9")) && (j < 100)) {
                        data[j] = data[j] * 10 + Integer.parseInt(str.substring(i, i + 1));
                        i++;
                        count=count*10;
                    }
                    data[j]=data[j]*1.0/count;
                    j++;
                    System.out.println(data[j]);
                }
                if (i >= str.length()) break;
                if ((k == 0)||(i<str.length())&&(pric(str.charAt(i)) >= pric(strr.charAt(k - 1)))) {
                    strr = strr.concat(str.substring(i, i + 1));
                    //System.out.println("strr:"+strr);
                    k++;
                }
                else {
                        //还要考虑一直大于的情况,一直字符串出栈
                    while (k >= 1 && (pric(str.charAt(i)) < pric(strr.charAt(k - 1)))) {
                        j--;
                        k--;
                        b = strr.charAt(k);
                        if (b == ''+'') data[j - 1] = add(data[j - 1], data[j]);
                        else if (b == ''-'') data[j - 1] = sub(data[j - 1], data[j]);
                        else if (b == ''*'') data[j - 1] = mul(data[j - 1], data[j]);
                        else if (b == ''/'') data[j - 1] = div(data[j - 1], data[j]);
                    }
                    strr = (String) strr.subSequence(0, k);
                    strr = strr.concat(str.substring(i, i + 1));
                    k++;
                }
            }
            k--;
            //出栈
            while (k >= 0 && j >= 0) {
                j--;
                b = strr.charAt(k);
                System.out.println("b:" + b);
                if (b == ''+'') data[j - 1] = add(data[j - 1], data[j]);
                else if (b == ''-'') data[j - 1] = sub(data[j - 1], data[j]);
                else if (b == ''*'') data[j - 1] = mul(data[j - 1], data[j]);
                else if (b == ''/'') data[j - 1] = div(data[j - 1], data[j]);
                k--;
            }
            msg.setText(Double.toString(data[0]));
        }
        @org.jetbrains.annotations.Contract(pure = true)
        private  double  add(double a, double b)
        {
            return a+b;
        }
        @org.jetbrains.annotations.Contract(pure = true)
        private  double  sub(double a, double b)
        {
            return a-b;
        }
        @org.jetbrains.annotations.Contract(pure = true)
        private  double  mul(double a, double b)
        {
            return a*b;
        }
        @org.jetbrains.annotations.Contract(pure = true)
        private  double  div(double a, double b)
        {
            return a*1.0/b;
        }
        @org.jetbrains.annotations.Contract(pure = true)
        private  int  pric(char a)
        {
            if(a==''+'')return 1;
            else if(a==''-'')return 2;
            else if(a==''*'')return 3;
            else if(a==''/'')return 4;
            return 0;
        }
    });

然后放一下 MainActivity.java 所有代码:

private EditText msg;
private Button zero;
private Button one;
private Button two;
private Button three;
private Button four;
private Button five;
private Button six;
private Button seven;
private Button eight;
private Button nine;
private Button add;
private Button sub;
private Button mul;
private Button div;
private Button mod;
private Button dot;
private Button clc;
private Button equ;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    this.msg = findViewById(R.id.msg);
    this.zero = findViewById(R.id.zero);
    this.one = findViewById(R.id.one);
    this.two = findViewById(R.id.two);
    this.three = findViewById(R.id.three);
    this.four = findViewById(R.id.four);
    this.five = findViewById(R.id.five);
    this.six = findViewById(R.id.six);
    this.seven  = findViewById(R.id.seven);
    this.eight = findViewById(R.id.eight);
    this.nine = findViewById(R.id.nine);
    this.add = findViewById(R.id.add);
    this.sub = findViewById(R.id.sub);
    this.mul = findViewById(R.id.mul);
    this.div = findViewById(R.id.div);
    this.equ = findViewById(R.id.equ);
    this.clc = findViewById(R.id.clc);
    this.dot = findViewById(R.id.dot);

    zero.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.append(zero.getText().toString());
        }
    });
    one.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.append(one.getText().toString());
        }
    });
    two.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.append(two.getText().toString());
        }
    });
    three.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.append(three.getText().toString());
        }
    });
    four.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.append(four.getText().toString());
        }
    });
    five.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.append(five.getText().toString());
        }
    });
    six.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.append(six.getText().toString());
        }
    });
    seven.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.append(seven.getText().toString());
        }
    });
    eight.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.append(eight.getText().toString());
        }
    });
    nine.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.append(nine.getText().toString());
        }
    });
    add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.setText(msg.getText()+"+");
        }
    });
    sub.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.setText(msg.getText()+"-");
        }
    });
    mul.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.setText(msg.getText()+"*");
        }
    });
    div.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.setText(msg.getText()+"/");
        }
    });
    dot.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            msg.setText(msg.getText()+".");
        }
    });
    clc.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int count=0;//记录覆盖的空格的个数
            String  s = msg.getText().toString();
            for(int i=0;i<s.length();i++)
                if((s.substring(i,i+1)==""))
                    count++;
                if(count>=s.length()-1)
                    count = s.length()-1;
            s = (String) s.subSequence(0,s.length()-1-count);
            s = s.concat("");
            msg.setText(s);
        }
    });
    equ.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int i = 0, j = 0, k = 0,count=1;//count 记录小数点后面有几位
            char b;
            String str=msg.getText().toString();
            double data[] = new double[100];//模拟数字栈
            String strr = "";//模拟字符栈
            //入栈
            for (i = 0; i < str.length(); i++) {
                count=1;
                data[j]=0;
                while ((i < str.length()) && (str.substring(i, i + 1).equals("0") || str.substring(i, i + 1).equals("1") || str.substring(i, i + 1).equals("2") || str.substring(i, i + 1).equals("3") || str.substring(i, i + 1).equals("4") || str.substring(i, i + 1).equals("5") || str.substring(i, i + 1).equals("6") || str.substring(i, i + 1).equals("7") || str.substring(i, i + 1).equals("8") || str.substring(i, i + 1).equals("9")) && (j < 100)) {
                    data[j] = data[j] * 10 + Integer.parseInt(str.substring(i, i + 1));
                    i++;
                }//取数字保存在data中
                j++;
                if((i < str.length()) &&(str.substring(i,i+1).equals(".")))
                {
                    i++;
                    j--;
                    while ((i < str.length()) && (str.substring(i, i + 1).equals("0") || str.substring(i, i + 1).equals("1") || str.substring(i, i + 1).equals("2") || str.substring(i, i + 1).equals("3") || str.substring(i, i + 1).equals("4") || str.substring(i, i + 1).equals("5") || str.substring(i, i + 1).equals("6") || str.substring(i, i + 1).equals("7") || str.substring(i, i + 1).equals("8") || str.substring(i, i + 1).equals("9")) && (j < 100)) {
                        data[j] = data[j] * 10 + Integer.parseInt(str.substring(i, i + 1));
                        i++;
                        count=count*10;
                    }//取数字保存在data中

                    data[j]=data[j]*1.0/count;
                    j++;
                    System.out.println(data[j]);
                }
                if (i >= str.length()) break;
                if ((k == 0)||(i<str.length())&&(pric(str.charAt(i)) >= pric(strr.charAt(k - 1)))) {
                    strr = strr.concat(str.substring(i, i + 1));
                    k++;
                }
                else {//还要考虑一直大于的情况,一直字符串出栈

                    while (k >= 1 && (pric(str.charAt(i)) < pric(strr.charAt(k - 1)))) {
                        j--;
                        k--;
                        b = strr.charAt(k);
                        if (b == ''+'') data[j - 1] = add(data[j - 1], data[j]);
                        else if (b == ''-'') data[j - 1] = sub(data[j - 1], data[j]);
                        else if (b == ''*'') data[j - 1] = mul(data[j - 1], data[j]);
                        else if (b == ''/'') data[j - 1] = div(data[j - 1], data[j]);
                    }
                    strr = (String) strr.subSequence(0, k);
                    strr = strr.concat(str.substring(i, i + 1));
                    k++;
                }
            }
            k--;
            //出栈
            while (k >= 0 && j >= 0) {
                j--;
                b = strr.charAt(k);
                System.out.println("b:" + b);
                if (b == ''+'') data[j - 1] = add(data[j - 1], data[j]);
                else if (b == ''-'') data[j - 1] = sub(data[j - 1], data[j]);
                else if (b == ''*'') data[j - 1] = mul(data[j - 1], data[j]);
                else if (b == ''/'') data[j - 1] = div(data[j - 1], data[j]);
                k--;
            }
            System.out.println(data[0]);
            msg.setText(Double.toString(data[0]));
        }
        @org.jetbrains.annotations.Contract(pure = true)
        private  double  add(double a, double b)
        {
            return a+b;
        }
        @org.jetbrains.annotations.Contract(pure = true)
        private  double  sub(double a, double b)
        {
            return a-b;
        }
        @org.jetbrains.annotations.Contract(pure = true)
        private  double  mul(double a, double b)
        {
            return a*b;
        }
        @org.jetbrains.annotations.Contract(pure = true)
        private  double  div(double a, double b)
        {
            return a*1.0/b;
        }
        @org.jetbrains.annotations.Contract(pure = true)
        private  int  pric(char a)
        {
            if(a==''+'')return 1;
            else if(a==''-'')return 2;
            else if(a==''*'')return 3;
            else if(a==''/'')return 4;
            return 0;
        }
    });
}

然后说一下这个计算器的 BUG: 1. 中缀转后缀表达式的中间无法解决出现负数的情况,负数入栈还不知道怎么考虑 2.% 虽然设计在上面也没有考虑 其他暂时还未发现什么 bug,有发现的同学告知一下哈!

最后强调一下 Android Studio 的 Debug 真的很好用,具体见博客: https://blog.csdn.net/csdn_aiyang/article/details/79483848

好啦,结束啦!

android studio修改配置文件夹(.android .gradle .AndroidStudio)位置

android studio修改配置文件夹(.android .gradle .AndroidStudio)位置

Android studio安装之后一般默认在c:/user/userid(*****)/;(比如:c:/user/xiaohong/)其他软件在安装中要创建缓存文件夹,那么也会在这个目录创建,比如Notepad++等

这三个文件夹的作用:

.android 这个文件夹是Android SDK生成的AVD(Android Virtual Device Manager)即模拟器存放路径 
.AndroidStudio 这个文件夹是Android Studio的配置文件夹,主要存放一些AndroidStudio设置和插件和项目的缓存信息 

.gradle 这个文件夹是构建工具 Gradle的配置文件夹,也会存储一些项目的构建缓存信息

默认创建路径在C盘,比较占空间,现在来转移至D盘

android文件夹的修改 
这个文件夹是由Android SDK配置模拟器生成的,也是最占空间的一个。 
首先,需要添加一个系统的环境变量ANDROID_SDK_HOME,如下图: 

这里写图片描述

 
创建模拟器后默认位置还是在C盘,复制到D盘,修改如下图: 

这里写图片描述

AndroidStudio文件夹的修改 
进入Android Studio的安装目录,进入bin文件夹,用文本编辑软件打开idea.properties,去掉以下两项的注释符号#,修改对应的路径为新路径即可。 

这里写图片描述

gradle文件夹的修改 

这里写图片描述

陈贵贵 发布了82 篇原创文章 · 获赞 4 · 访问量 2万+ 私信 关注

关于android studio计算器实例【实测成功】android studio计算器教程的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于android studio 项目 :UI设计高精度实现简单计算器、android studio--简单的计算器实现、Android Studio—— 简易计算器实现、android studio修改配置文件夹(.android .gradle .AndroidStudio)位置等相关内容,可以在本站寻找。

本文标签: