如何在java中执行cnf运算符?

如何在java中执行cnf运算符?,java,acm-java-libraries,conjunctive-normal-form,Java,Acm Java Libraries,Conjunctive Normal Form,我试图在Java中使用CNF运算符,但在等式方面出现了一个错误 首先,我做了大部分的软件,但我没有完全做 我的代码如下: import acm.program.*; public class split extends ConsoleProgram{ public void run() { String veri = "(p or q or s or t or k) and (p or q)"; String yeni = tekrarsil(parcala(ve

我试图在Java中使用CNF运算符,但在等式方面出现了一个错误

首先,我做了大部分的软件,但我没有完全做

我的代码如下:

import acm.program.*;
public class split extends ConsoleProgram{
public void run()
{
    String veri     = "(p or q or s or t or k) and (p or q)";
    String yeni     = tekrarsil(parcala(veri));

    int []sayilar = new int[yeni.length()];
    for (int i = 0; i < yeni.length(); i++) {
        sayilar[i] = readInt("give a number for "+yeni.charAt(i)+" :");

    }
    for (int i = 0; i < sayilar.length; i++) {
        println(sayilar[i]);
    }
}

public String parcala(String veri)
{
    String yenistr  = "";
    String yeni[]   = veri.split("and");
    for (int j = 0; j < yeni.length; j++) {
        String yveri[] = yeni[j].split("or");
        for (int i = 0; i < yveri.length; i++) {
            yveri[i] = yveri[i].trim();
            if(i==0){
                yenistr = yenistr.concat(yveri[i].substring(1));

            }else if(i==yveri.length-1){
                yenistr = yenistr.concat(yveri[i].substring(0,yveri[i].length()-1));

            }else{
                yenistr = yenistr.concat(yveri[i]);

            }
        }
    }
    return (yenistr);
}
public String tekrarsil(String S)
{
        for (int i = 0; i < S.length(); i++)
            for (int k = i+1; k <= S.length()-1; k++){
                if (S.charAt(i) == S.charAt(k))
                {
                    S = S.substring(0,k)+ S.substring(k+1,S.length());
                    k--;
                }
            }
        return S;

     }
    }
该程序与以下内容类似:

为p:1给出一个数字(用户将给出一个数字(
true
)或零(
false

为q:0给出一个数字
为s:1给出一个数字
为t:0给出一个数字
为k:0给出一个数字
(如果变量使用多个,程序将询问一次)

如果我们看这些变量,我们可以看到(1或0或1或0或0)和(1或0) 它将返回真值,但我不能这样做。我不明白怎么做

最好的祝愿。

如何进行一些修改以满足您当前的需要

或者,作为一种粗略的解决方法,您可以将用作JavaScript引擎,只需将操作的文本表示形式更改为
&&
|
等操作符,然后让JS引擎进行评估并给出结果

如果您只对表达式的输出值感兴趣,以上内容就足够了

如果您需要设计自己的算法,那么您需要自己编写一个解析器,这是一项乏味的工作,但也是可行的

让用户输入所有表达式和运算符(从实现的角度来看,这不会使表达式有太大的不同)。您当然需要验证输入。您需要处理的数据包括
0
1
、括号(触发结果堆叠/取消堆叠)和运算符本身(此外,还有空格,但您应该忽略它们)


基本上,从左到右进行计算,取第一个数据参数(无论是
0
1
)并将其放入当前结果中。然后读取运算符并将其应用于结果和下一条数据。以此类推,直到到达输入的末尾。遇到括号时,最简单的方法是让解析器使用括号内的表达式递归调用自己(您应该将它们匹配起来),并将返回值视为顺序数据。

您应该始终使用100%英语编写源代码。这样做的一个原因是作为一个专业标准,另一个原因是让其他人理解它,而且可能会有更多…如果是问题,我可以更改代码。我认为这没关系。不过,我很高兴你的评论,我在等待你的帮助。这没关系,除非你想在这里得到答案。有多少程序员说英语而不是你的语言?你是向自己的国民,还是向全世界提出你的问题?哪一个更有可能给出正确答案?这取决于你。事实上,世界上有很多地方的代码不是用英语写的。人们总是使用他们的母语。这可能会减少理解它的人的数量,所以如果你想得到最大的反馈,但不需要对他大发雷霆,这不是最好的主意。谢谢你的关注。但是,我不能使用另一个库。我想你理解这个问题,但我必须用我自己的代码,然后你可能想看看,这样你就可以掌握一个更好的方法。此外,网上还有几篇文章。这些比我能解释的更好(即,我的答案中的“如果你需要设计你自己的算法”部分)。
(p or q or s or t or k) and (q or p)