java - 将所有逻辑表达式变量放入数组中

标签 java arrays truthtable

我正在编写一个程序来打印表达式的真值表。目前,我的代码采用逻辑表达式并将其转换为输入中所示的两个数组。我需要帮助来满足我的算法的以下输出

示例:逻辑表达式 = ((-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/

相关文章:

Java-如何在文件中写入位而不是字符

java - 如何制作一个包含另一个数组的随机元素对的二维数组?

javascript - 如何使用 Javascript 读取 JSON 数组以获取值(如果存在)

c++ - bool 真值表 C++

java - 在 domain.xml 中添加 SSL keystore 密码作为别名

java - 想实现一个强化学习连接四个agent

java - 并行与串行实现解释

java - 如何在随机生成数字后返回单位数计数(Java,数组)

c++ - 将 truthTable 结果转换为 bool 语句

c++ - 如何获得函数的真值表 (( c + ~d ) * b ) * ~( d + a * e )