看小伙如何用java一行核心代码实现四则混合运算(带括号)计算器

哈哈,好了不开玩笑了,今天的主角就是java8的新特性Nashorn JavaScript(完全支持ECMAScript 5.1规范以及一些扩展),简单来说,就是可用通过它实现,java和javascript代码的互相调用。当然,其实这个特性java8以前就有(Rhino),只不过java8这个新的对以前进行了优化。

至于怎么用呢?让我们看下面这个例子。
我们都知道,javascript里面有个函数eval(String),可以对传入的合法字符串参数进行计算。下面让我们通过java调用javascript的eval函数进行计算表达式:

package Test;

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

public class Cal {
    public  static Object calculate(String s){
        Object object =  null;
        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");

        try {
            object = nashorn.eval(s);
        } catch (ScriptException e) {
            object = "请输入正确表达式!!! please input the correct formula!!!";
        }
        return object;
    }
    public static void main(String[] args) {
            System.out.println(calculate("(347+34.5)/(75-72)+34**3").toString());
    }
}

当然这种写法,在自己本地还可以运行,如果你想用这个方法过oj?额,反正我是没成功过。。。

当然除此之外,你还可以jjs命令行工具,用js代码进行交互(先要安装好并配置好java8环境)。

jjs

jjs是个基于Nashorn引擎的命令行工具。它接受一些JavaScript源代码为参数,并且执行这些源代码。

例如,我们创建一个具有如下内容的sample.js文件:

print('Hello World!');

打开控制台,输入以下命令:

$ jjs sample.js

以上程序输出结果为:

Hello World!

jjs 交互式编程

打开控制台,输入以下命令:

$ 
jjs  //进入控制台输入jjs指令
jjs> print("Hello, World!")
Hello, World!
jjs> quit()

传递参数

打开控制台,输入以下命令:

$ jjs -- a b c
jjs> print('字母: ' +arguments.join(", "))
字母: a, b, c
jjs> 

JavaScript 中调用 Java

var BigDecimal = Java.type('java.math.BigDecimal');

function calculate(amount, percentage) {

   var result = new BigDecimal(amount).multiply(
   new BigDecimal(percentage)).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
   
   return result.toPlainString();
}

var result = calculate(568000000000000000023,13.9);
print(result);

我们使用 jjs 命令执行以上脚本,输出结果如下:

$ jjs sample.js
78952000000000002017.94

但java11中此特性好像又会被移除。。。


欢迎关注公众号BatFor

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值