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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值