当前位置: 首页 > news >正文

java 算术字符串_java-从定义为字符串的运算符执行算术运算

我最近一直在尝试找到解决该问题的方法,但是到目前为止,我一直没有成功.

我正在考虑执行操作a#b#c#d,其中a,b,c和d是预定义的常数,并且#可以采用以下任何运算符”,’-‘,’*’,’ /’.

我正在考虑为#中的所有运算符替换找到#b#c#d的所有可能(不同)解决方案.

我在考虑以下几行的逻辑:

// Global declaration of an array list

static ArrayList values;

String[] chars = {"+", "-", "*", "/"};

int totalSolutions = 0;

values = new ArrayList();

for (int i=0; i

for (int j=0; j

for (int k=0; k

if (isNew(a chars[i] b chars[j] c chars[k] d)) totalSolutions += 1;

}

}

}

public static boolean isNew(double value){

if (values.contains(value)) return false;

else values.add(value);

return true;

}

isNew()是一个函数,它仅检查所获得的新解决方案是否与所获得的所有先前解决方案不同.

我还没有找到在操作数之间应用运算符的方法.

在此方面的任何帮助将不胜感激.

解决方法:

从JDK1.6开始,您可以使用内置Javascript引擎为您评估此表达式.

import javax.script.ScriptEngineManager;

import javax.script.ScriptEngine;

public class Main {

public static void main(String[] args) throws Exception{

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("JavaScript");

String expression = "100+200/100*2";

System.out.println(engine.eval(expression));

}

}

因此,您可以根据运算符优先级规则使用它来计算表达式.

另外,如果您只需要解决方案的数量,则使用TreeSet可能会更容易,然后在最后打印该集的大小.

这是一个完整的解释:

public class Main {

public static void main(String[] args) {

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("JavaScript");

int a = 100;

int b = 200;

int c = 300;

int d = 100;

String[] chars = {"+", "-", "*", "/"};

try {

TreeSet set = new TreeSet<>();

for (int i=0; i

for (int j=0; j

for (int k=0; k

String expression = a+chars[i]+b+chars[j]+c+chars[k]+d;

set.add(String.valueOf(engine.eval(expression)));

}

}

}

System.out.println(set.size());

} catch (ScriptException ex) {

Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

标签:java,algorithm,operators

来源: https://codeday.me/bug/20191118/2028562.html

相关文章:

  • c#项目 java项目_c#项目转Java项目!!!!!
  • mysql 创建xml字段_用MySQL和PHP创建XML
  • java实现 一维装箱问题_c语言来实现贪心算法之装箱问题
  • hmcl电脑java我的世界启动器_hello minecraft下载
  • 强制停止java_java – 如何强制停止Android应用程序
  • acacm icpc java_用Latex高效整理你的ACM-ICPC模板
  • java getmethods_java – 什么决定了Class.getMethods()的返回顺序?
  • java mapper xml 参数_Mybatis 文档篇 3.4:Mapper XML 之 Parameters
  • java类的加载是jvm,JVM学习(一):Java类的加载机制
  • PHP一点上传文件时下载文件啦,PHP中上传大体积文件时需要的设置
  • php big5 转utf8,php如何实现big5转utf8
  • kulc的java算法,Java KualiDecimal.ZERO屬性代碼示例
  • 用php实现一用户登陆程序,php实现简单用户登录功能程序代码
  • php mysql 实例教程,PHP和MySql开发实例教程
  • matlab与plc连接,基于Matlab与PLC的实时控制系统
  • @jsonView过滤属性
  • CentOS 7 防火墙操作
  • dva中组件的懒加载
  • jquery ajax学习笔记
  • mockjs让前端开发独立于后端
  • Python 基础起步 (十) 什么叫函数?
  • Spark学习笔记之相关记录
  • Vue.js源码(2):初探List Rendering
  • 半理解系列--Promise的进化史
  • 从0实现一个tiny react(三)生命周期
  • 从零开始的无人驾驶 1
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 浮动相关
  • 复习Javascript专题(四):js中的深浅拷贝
  • 给初学者:JavaScript 中数组操作注意点
  • 记录:CentOS7.2配置LNMP环境记录
  • 排序算法学习笔记
  • 手写双向链表LinkedList的几个常用功能
  • 用jquery写贪吃蛇
  • 正则与JS中的正则
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #etcd#安装时出错
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #在 README.md 中生成项目目录结构
  • $NOIp2018$劝退记
  • (02)Hive SQL编译成MapReduce任务的过程
  • (11)MATLAB PCA+SVM 人脸识别
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (JS基础)String 类型
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (六)Hibernate的二级缓存
  • (三)模仿学习-Action数据的模仿
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转载)CentOS查看系统信息|CentOS查看命令