我正在为我在离散数学中的一项作业开发真值表生成器。我必须实现分流场算法,而这样做我完全迷失了。我的问题是实现调车码算法。首先,我将展示我查看过的资源,然后是我的问题,然后是我已经启动的代码。
我真正需要的..我知道它要求很多。但它是调车场算法的简化版本。当使用诸如 o1 o2 之类的符号时,我在维基百科示例中的部分内容中迷失了方向。我真正需要的是有人逐步解释如何应用它。我也不明白 RPN 符号是如何工作的。但我现在可以继续阅读。
- 关闭码的实现:
http ://www.technical-recipes.com/2011/a-mathematical-expression-parser-in-java/#more-1658 - 维基百科关闭码算法:
http ://en.wikipedia.org/wiki/Shunting-yard_algorithm - 有人在stackoverflow上
的问题与调车场算法有关的问题 - 基本实现
在Java中生成真值表
这是一个示例输入:
A -> B
(C)
:. F
我应该生成一个显示的输入:
ABCA->BF
TTT--T---T
TFT--F---F
FTT--T---T
FFT--T---F
TTF-- T---F
TFF--F---F
FTF--T---F
FFF--T---F
import java.util.Stack;
import java.util.ArrayList;
public class ShuttingYard{
private static final char THEREFORE = '>';
private static final char AND = '&';
private static final char OR = '|';
public static String inputToReversePolishNotation(String input)
{
char[] tokens = input.toCharArray();
ArrayList<String> output = new ArrayList<String>();
Stack<String> oppStack = new Stack<String>();
for(int i = 0; i < tokens.length; i++)
{
}
return null;
}
public static boolean isLogicOperator(char input)
{
switch(input)
{
case THEREFORE:
return true;
case AND:
return true;
case OR:
return true;
default:
return false;
}
}
}