博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最简单 最快速 地在Andriod studio上实现一个简易计算器 【eval () 函数】 ! ! !
阅读量:281 次
发布时间:2019-03-01

本文共 4788 字,大约阅读时间需要 15 分钟。

首先,先来看看在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 代码:


三 :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,方便继续运算 } }}

运行结果:

在这里插入图片描述

转载地址:http://qaao.baihongyu.com/

你可能感兴趣的文章