Если вы хотите преобразовать математическое выражение в другую форму, я рекомендую изменить его на ссылку postfix/prefix expressions (<), а также сначала расскажет вам, как преобразовать обратно в «infix»), а затем попытайтесь с ней поиграть (вы можете обрабатывайте свои функции (например, sin(x)
) в качестве констант). Надеюсь, вы можете сделать это сами, много источников, чтобы найти ссылки.
Link to a simple Infix/Postfix Calculator , так что вы можете попробовать, если вы еще не пробовали это раньше.
Далее преобразовать обратно в инфикс, но на этот раз распределяя умножение и деление
например.
*
/\
A +
/\
B /
/\
C D
Infix: A*(B+C/D)
Postfix: ABCD/+*
ABCD/+*
C and D division first (distribute) >>> C/D
B and C/D addition(addition,nothing to distribute) >>> B+C/D
A and B + C/D multiplication (distribute) >>> A*B+A*C/D
Так что, вообще говоря, вы ничего не делаете, кроме как объединяете строки сложения и вычитания.
Но:
Если у вас есть умножение на A
затем добавить "A*"
строку в самом начале и после каждого '+'
или '-'
Когда вы разделите на B
затем добавить "/B"
строку до самого конца и до каждого '+'
или '-'
.
Я считаю, что это должно охватывать все простые выражения. Вы можете (или не обязательно) нуждаться в еще нескольких случаях, когда выражение, разветвленное широко, не полностью продумало это. Я буду благодарен за отзывы.
Насколько я знаю, нет встроенных функций, которые делают такие вещи. Для этого вам, скорее всего, придется самостоятельно разобрать строку и развернуть выражение. –
Используйте Prolog для этого ... Это можно сделать в нескольких строках. – nhahtdh
Ищите библиотеку синтаксического анализатора java и напишите парсер – Patashu