Есть объект, который является промышленной частью, которую я храню в базе данных.Основываясь на пользовательском вводе, нам нужно рассчитать номер каждой необходимой промышленной детали.Мы рассчитываем это число на основе формулы, которую мы храним в дБ для каждой промышленной детали.
part1 -> формула = (input1 + input2) / (input3) part2 -> формула = (input1 * input2 * input3)
Поэтому, когда пользователь вводит input1 = 4 input2 = 6 input3 = 2, мне нужно вызвать функцию вычисления количества деталей.нет из part1s - (4 + 6) / 2 = 5 мес из part2s - (4 * 6 * 2) = 48
Я мог бы сделать это с помощью String, но это становится очень сложным, потому что у меня больше 7пользовательские вводы и формулы также очень сложны.
Есть ли лучший способ сделать это.
Update1 Я пытался сделать это с помощью регулярных выражений Java
String[] validInputs = {"halfs", "fulls", "noOfPartitions"};
List<String> validInputsList = Arrays.asList(validInputs);
HashMap inputMap = new HashMap();
inputMap.put("halfs", 3);
inputMap.put("fulls", 3);
inputMap.put("noOfPartitions", 2);
String formula = "(halfs+fulls)/noOfPartitions";
Iterator iter = inputMap.keySet().iterator();
while(iter.hasNext()) {
String key = (String)iter.next();
Pattern p = Pattern.compile(key);
// get a matcher object
Matcher m = p.matcher(formula);
formula = m.replaceAll(inputMap.get(key).toString());
}
System.out.println(formula);
Update2 Мне действительно нужно это для приложения Grails.Вот что я в итоге сделал.
def inputMap = ['halfs':3, 'fulls':3,'noOfPartitions':2]
def formula = '(halfs+fulls)/noOfPartitions'
inputMap.each { entry ->
def pat = ~entry.key
assert pat instanceof java.util.regex.Pattern
def matcher = (formula =~ /$pat/)
formula = matcher.replaceAll((inputMap.get(entry.key)).toString())
assert matcher instanceof java.util.regex.Matcher
}
System.out.println(formula)
Eval.me(formula)