当前位置: 首页 > 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的实时控制系统
  • 【翻译】babel对TC39装饰器草案的实现
  • Android单元测试 - 几个重要问题
  • const let
  • EventListener原理
  • Golang-长连接-状态推送
  • Java 23种设计模式 之单例模式 7种实现方式
  • js数组之filter
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • mongo索引构建
  • Mybatis初体验
  • MySQL QA
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • spring + angular 实现导出excel
  • SSH 免密登录
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 扑朔迷离的属性和特性【彻底弄清】
  • 软件开发学习的5大技巧,你知道吗?
  • 什么是Javascript函数节流?
  • 用Canvas画一棵二叉树
  • 正则与JS中的正则
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 仓管云——企业云erp功能有哪些?
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​2021半年盘点,不想你错过的重磅新书
  • ​configparser --- 配置文件解析器​
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #vue3 实现前端下载excel文件模板功能
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (1) caustics\
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (70min)字节暑假实习二面(已挂)
  • (分布式缓存)Redis分片集群
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • .form文件_一篇文章学会文件上传
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET NPOI导出Excel详解
  • .net 怎么循环得到数组里的值_关于js数组
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化