最简单 最快速 地在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,方便继续运算
        }
    }
}

运行结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45260385/article/details/108738093