最简单 最快速 地在Andriod studio上实现一个简易计算器 【eval () 函数】 ! ! !

首先,先来看看在eclipse中,怎么通过用 js 中的 eval() 函数 实现字符串表达式运算

package test;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class T {

	static ScriptEngine j = new ScriptEngineManager().getEngineByName("js");
	/**
	 * @param args
	 * @throws ScriptException 
	 */
	public static void main(String[] args) {
		try {
			System.out.println(j.eval("1+2*3-8"));//表达式应输出-1
		} catch (ScriptException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

运行结果:
在这里插入图片描述



接下来,在 Andriod studio 中实现简易计算器功能:

一 : 在 build.gradle 中的 dependencies 添加依赖:
(不导入的话无法使用 javax.script 的那几个包)

implementation 'io.apisense:rhino-android:1.1.1'

二 : 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="match_parent"
    android:rowCount="6"
    android:columnCount="4"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/input"
        android:layout_width="352dp"
        android:layout_height="58dp"
        android:layout_row="0"
        android:layout_columnSpan="4"
        android:text="0"
        android:textSize="20dp" />


    <Button
        android:id="@+id/buttoneliminate"
        android:layout_width="348dp"
        android:layout_height="wrap_content"
        android:layout_row="1"
        android:layout_column="0"
        android:layout_columnSpan="4"
        android:text="清除"
        android:textSize="24sp" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="2"
        android:layout_column="0"
        android:textSize="18sp"
        android:text="1"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="2"
        android:layout_column="1"
        android:textSize="18sp"
        android:text="2"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="2"
        android:layout_column="2"
        android:textSize="18sp"
        android:text="3"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/buttonadd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="2"
        android:layout_column="3"
        android:textSize="18sp"
        android:text="+"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="3"
        android:layout_column="0"
        android:textSize="18sp"
        android:text="4"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="3"
        android:layout_column="1"
        android:textSize="18sp"
        android:text="5"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/button6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="3"
        android:layout_column="2"
        android:textSize="18sp"
        android:text="6"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/buttonsub"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="3"
        android:layout_column="3"
        android:textSize="18sp"
        android:text="-"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/button7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="4"
        android:layout_column="0"
        android:textSize="18sp"
        android:text="7"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/button8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="4"
        android:layout_column="1"
        android:textSize="18sp"
        android:text="8"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/button9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="4"
        android:layout_column="2"
        android:textSize="18sp"
        android:text="9"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/buttonmul"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="4"
        android:layout_column="3"
        android:textSize="18sp"
        android:text="*"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/buttonpoint"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="5"
        android:layout_column="0"
        android:textSize="18sp"
        android:text="."
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/button0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="5"
        android:layout_column="1"
        android:textSize="18sp"
        android:text="0"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/buttonequal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="5"
        android:layout_column="2"
        android:textSize="18sp"
        android:text="="
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />
    <Button
        android:id="@+id/buttondiv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_row="5"
        android:layout_column="3"
        android:textSize="18sp"
        android:text="/"
        tools:layout_editor_absoluteX="276dp"
        tools:layout_editor_absoluteY="130dp" />

</GridLayout>

三 :MainActivity.java 代码

(这份java代码适合正常的运算,如果输入“1 - + 2 +”之类的非正常表达式可能会闪退,需要稍微修改代码)

package com.example.cal;

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

import androidx.appcompat.app.AppCompatActivity;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class MainActivity extends AppCompatActivity {
    private Button btnlim,btn0,btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btnp,btnadd,btnsub,btnmul,btndiv,btnequ;
    private TextView in;
    private String s="",result="";

    ScriptEngine j =  new ScriptEngineManager().getEngineByName("javascript");


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

        in=(TextView) findViewById(R.id.input);

        btnlim = (Button) findViewById(R.id.buttoneliminate);
        btn0 = (Button) findViewById(R.id.button0);
        btn1 = (Button) findViewById(R.id.button1);
        btn2 = (Button) findViewById(R.id.button2);
        btn3 = (Button) findViewById(R.id.button3);
        btn4 = (Button) findViewById(R.id.button4);
        btn5 = (Button) findViewById(R.id.button5);
        btn6 = (Button) findViewById(R.id.button6);
        btn7 = (Button) findViewById(R.id.button7);
        btn8 = (Button) findViewById(R.id.button8);
        btn9 = (Button) findViewById(R.id.button9);
        btnp = (Button) findViewById(R.id.buttonpoint);
        btnadd = (Button) findViewById(R.id.buttonadd);
        btnsub = (Button) findViewById(R.id.buttonsub);
        btnmul = (Button) findViewById(R.id.buttonmul);
        btndiv = (Button) findViewById(R.id.buttondiv);
        btnequ = (Button) findViewById(R.id.buttonequal);

        btnlim.setOnClickListener(new mclick());
        btn0.setOnClickListener(new mclick());
        btn1.setOnClickListener(new mclick());
        btn2.setOnClickListener(new mclick());
        btn3.setOnClickListener(new mclick());
        btn4.setOnClickListener(new mclick());
        btn5.setOnClickListener(new mclick());
        btn6.setOnClickListener(new mclick());
        btn7.setOnClickListener(new mclick());
        btn8.setOnClickListener(new mclick());
        btn9.setOnClickListener(new mclick());
        btnp.setOnClickListener(new mclick());
        btnadd.setOnClickListener(new mclick());
        btnsub.setOnClickListener(new mclick());
        btnmul.setOnClickListener(new mclick());
        btndiv.setOnClickListener(new mclick());
        btnequ.setOnClickListener(new mclick());

    }


    class mclick implements OnClickListener {
        public void onClick(View v)
        {
            if(v==btnlim){  //清除
                s = "";
            }
            else if(v==btnequ){  //按 = 求值
                try {
                        String t=s;
                        result=j.eval(t).toString(); //求出当前表达式的值并转换成string类型,存入ss中
                        s += '='; //加入= 和 结果 (没求表达式前,不能加=,否则为表达式无法计算)
                        s += result;
                    } catch (ScriptException e) {
                        e.printStackTrace();
                }
            }
            else { //其他按钮,直接加入表达式即可
                if(v==btn0) s+='0';
                if(v==btn1) s+='1';
                if(v==btn2) s+='2';
                if(v==btn3) s+='3';
                if(v==btn4) s+='4';
                if(v==btn5) s+='5';
                if(v==btn6) s+='6';
                if(v==btn7) s+='7';
                if(v==btn8) s+='8';
                if(v==btn9) s+='9';
                if(v==btnp) s+='.';
                if(v==btnadd) s+='+';
                if(v==btnsub) s+='-';
                if(v==btnmul) s+='*';
                if(v==btndiv) s+='/';
            }

            in.setText(s);
            if(v==btnequ) s=result;  //展示完结果后,把result的值赋给s,方便继续运算
        }
    }
}

运行结果:

在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单Android 计算器功能实现的步骤: 1. 创建一个新的 Android Studio 项目,并在布局文件中添加一个 EditText 控件和多个 Button 控件,用于输入和显示计算表达式。 2. 在 MainActivity 中定义一个字符串变量,用于存储当前的计算表达式。 3. 为每个 Button 控件添加一个 OnClickListener,当用户点击 Button 时,将相应的数字或运算符添加到计算表达式中,并更新 EditText 控件的显示。 4. 当用户点击等号按钮时,解析计算表达式并计算结果。这可以通过使用 Java 中的 ScriptEngine 类来实现。 5. 将计算结果显示在 EditText 控件中。 下面是一个简单的示例代码,可以作为参考: ``` public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText mEditText; private String mExpression = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditText = findViewById(R.id.edit_text); findViewById(R.id.btn_0).setOnClickListener(this); findViewById(R.id.btn_1).setOnClickListener(this); findViewById(R.id.btn_2).setOnClickListener(this); findViewById(R.id.btn_3).setOnClickListener(this); findViewById(R.id.btn_4).setOnClickListener(this); findViewById(R.id.btn_5).setOnClickListener(this); findViewById(R.id.btn_6).setOnClickListener(this); findViewById(R.id.btn_7).setOnClickListener(this); findViewById(R.id.btn_8).setOnClickListener(this); findViewById(R.id.btn_9).setOnClickListener(this); findViewById(R.id.btn_plus).setOnClickListener(this); findViewById(R.id.btn_minus).setOnClickListener(this); findViewById(R.id.btn_multiply).setOnClickListener(this); findViewById(R.id.btn_divide).setOnClickListener(this); findViewById(R.id.btn_equals).setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_0: mExpression += "0"; break; case R.id.btn_1: mExpression += "1"; break; case R.id.btn_2: mExpression += "2"; break; case R.id.btn_3: mExpression += "3"; break; case R.id.btn_4: mExpression += "4"; break; case R.id.btn_5: mExpression += "5"; break; case R.id.btn_6: mExpression += "6"; break; case R.id.btn_7: mExpression += "7"; break; case R.id.btn_8: mExpression += "8"; break; case R.id.btn_9: mExpression += "9"; break; case R.id.btn_plus: mExpression += "+"; break; case R.id.btn_minus: mExpression += "-"; break; case R.id.btn_multiply: mExpression += "*"; break; case R.id.btn_divide: mExpression += "/"; break; case R.id.btn_equals: calculateResult(); break; } mEditText.setText(mExpression); } private void calculateResult() { ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino"); try { Object result = engine.eval(mExpression); mExpression = result.toString(); } catch (ScriptException e) { mExpression = "Error"; } } } ``` 这个示例代码实现一个简单计算器功能,支持加、减、乘、除四种基本运算,以及括号和小数点等。当用户点击等号按钮时,程序会解析计算表达式并计算结果,然后将结果显示在 EditText 控件中。 注意,这只是一个简单的示例代码,实际的计算器功能可能需要更复杂的处理逻辑和界面设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值