我正在编写一个程序来打印表达式的真值表。目前,我的代码采用逻辑表达式并将其转换为输入中所示的两个数组。我需要帮助来满足我的算法的以下输出
示例:逻辑表达式 = ((-A)+B))+C
输入:
logExp: [(, (, -, A, ), +, B, ), ), +, C]
indepVar:[A,B,C]
预期输出:
数组:[A, B, C, (-A), (-A)+B, ((-A)+B))+C]//带或不带括号都可以。
我用这个算法得到的当前输出:
数组:[A,B,C,(-A)+B)]
代码:
public static ArrayList<String> Head(ArrayList<Character> logExp, ArrayList<Character> indepVar){
ArrayList<String> array = new ArrayList<String>();
int count = 0;
String str = "";
for(int i = 0; i < indepVar.size(); i++){
array.add(indepVar.get(i).toString());
}
for(int i = 0; i < logExp.size(); i++){
if(logExp.get(i)== '(')
count++;
else if(logExp.get(i) == ')')
count--;
if(count > 0)
str += logExp.get(i);
if(count == 0 && str != ""){
array.add(str);
str = "";
}
}
return array;
我对递归函数不是很有经验,但我尝试执行与上面的算法类似的算法,该算法应该通过获取字符串并将括号之间的所有内容添加到数组中来递归地工作。
然后再次将其作为参数传递给相同的算法,直到括号之间的所有表达式都添加到数组中。但效果并不好,我也不知道自己哪里做错了。有什么想法吗?
这是代码:
public static ArrayList<String> rec(String str){
int count = 0;
char ch;
String s = "";
ArrayList<String> array = new ArrayList<String>();
for(int i = 0; i < str.length(); i++){
ch = str.charAt(i);
if(ch == '(')
count++;
if(count > 0)
s += ch;
if(ch == ')')
count--;
if(count == 0 && s != ""){
s = s.substring(1, s.length()-1);
array.add(s);
count = 0;
return rec(s);
}
}
return array;
}
最佳答案
您当前的算法所做的是在一组括号内添加任何内容。从这个问题的性质来看,我认为应该是递归的。
一个简单的解决方案(伪代码)是:
main_method (indep, expr):
add all of indep to array
recur (expr,array)
recur (expr,array):
find expression in parens
recur (thing_in_parens,array)
add expr to array
希望这会有所帮助!
关于java - 将所有逻辑表达式变量放入数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37636638/