gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:12 27 4
gpt4 key购买 nike

我最近一直在试图找到解决这个问题的方法,但到目前为止我一直没有成功。

我正在考虑执行操作 a # b # c# d,其中 a、b、c 和 d 是预定义的常量,# 可以采用以下任何运算符的值 '+ '、'-'、'*'、'/'。

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

我在考虑以下几行逻辑:

// Global declaration of an array list
static ArrayList<Double> values;

String[] chars = {"+", "-", "*", "/"};
int totalSolutions = 0;
values = new ArrayList<Integer>();
for (int i=0; i<chars.length; i++){
for (int j=0; j<chars.length; j++){
for (int k=0; k<chars.length; 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<String> set = new TreeSet<>();
for (int i=0; i<chars.length; i++){
for (int j=0; j<chars.length; j++){
for (int k=0; k<chars.length; 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 - 从定义为字符串的运算符执行算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38007367/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com