Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不使用外部Java插件的情况下简化布尔代数表达式?_Java_Boolean_Simplify - Fatal编程技术网

如何在不使用外部Java插件的情况下简化布尔代数表达式?

如何在不使用外部Java插件的情况下简化布尔代数表达式?,java,boolean,simplify,Java,Boolean,Simplify,我正在尝试从项目的另一部分生成布尔代数表达式,并在输出之前对其进行简化。由于程序其余部分的性质,此布尔表达式将仅包含or语句 例如,以aC+bC+bC+Ab+aC+aC+Ab这样的表达式开头,以A+C结尾。小写字母表示not,例如A表示not A 我花了好几个小时试图弄明白这一点,但每次我解决了一个案子,就毁了另一个。我想对于这个问题有一些递归函数,但我很难在别处找到任何东西 编辑:说得清楚一点,我知道如何在纸上简化表达式,但我无法用Java来简化它 提前谢谢 public static voi

我正在尝试从项目的另一部分生成布尔代数表达式,并在输出之前对其进行简化。由于程序其余部分的性质,此布尔表达式将仅包含or语句

例如,以aC+bC+bC+Ab+aC+aC+Ab这样的表达式开头,以A+C结尾。小写字母表示not,例如A表示not A

我花了好几个小时试图弄明白这一点,但每次我解决了一个案子,就毁了另一个。我想对于这个问题有一些递归函数,但我很难在别处找到任何东西

编辑:说得清楚一点,我知道如何在纸上简化表达式,但我无法用Java来简化它

提前谢谢

public static void mutate (ArrayList<String> Final, ArrayList<String> Factored, String a){
 int multiples = 0;
 String holder = "";
 for (int i = 0; i < Final.size(); i++){
 if (Final.get(i).contains(a)){
     multiples++;
     if (multiples == 1)
        holder = Final.get(i);
     if (multiples >=2)
         Factored.add(Final.get(i));
 }
 }
if (multiples > 1)
 Factored.add(holder);
 }
public static void simplify (ArrayList<String> Factored, char a, ArrayList<String> Main){
String temp = "";
int size = Factored.size();
int cnt = 0;
int cnt2 = 0;
int holder = 0;
System.out.println(Factored);
int menial = 0;

if (Factored.size() == 0)
menial = 1;
else{
    for (int i = 0; i < size; i++){             //Gets rid of leading letters
    if(Factored.get(i).charAt(0) == a){
        temp = Factored.get(i).substring(1);
        Factored.add(temp);
    }
}
for (int i = 0; i < size; i++){             //Gets rid of leading letters
    if(Factored.get(i).charAt(1) == a){
        temp = Factored.get(i).substring(1);
        Factored.add(temp);
    }
}   

for (int j = 0; j < size; j++){             
        Factored.remove(j - cnt);
        cnt++;
    }   
for (int i = 0; i < Factored.size(); i++){              //gets rid of duplicates if they exist
        for (int j = i + 1; j < Factored.size();j++)
        if (Factored.get(i).equals(Factored.get(j))){
            cnt2++;
            if (cnt2 == 1)
                holder = i;
        }

}
    if (cnt2 >= 1)
            Factored.remove(holder);    

    String temp1 = "";
    int size1 = Factored.size();
    for (int i = 0; i < size1; i++){      //Makes it uppercase
        temp1 = Factored.get(i).toUpperCase();
        Factored.add(temp1);
    }
    int cnt3 = 0;
    for (int i = 0; i <size1; i++){
        Factored.remove(i-cnt3);
        cnt3++;
    }
    int sizeOver2 = Factored.size()/2;
    int holder1 = 0; int holder2 = 0;
    for (int q = 0; q < sizeOver2; q++){    
    int cnt4 = 0;
    for (int i = 0; i < Factored.size(); i++){              //gets rid of duplicates if they exist now that there are caps
        for (int j = i + 1; j < Factored.size();j++)
        if (Factored.get(i).equals(Factored.get(j))){
            cnt4++;
            if (cnt4 == 1)
                holder1 = i;
                holder2 = j;
        }

        if (cnt4 >= 1){
            Factored.remove(holder1);
            Factored.remove(holder2 - 1);
        }

    }
    }
    if (Factored.size() == 0)
        Main.add(Character.toString(a));
    else if (Factored.size() > 1)
            menial = 5;
    else
        for (int i = 0; i < Factored.size(); i++)
            Main.add(Factored.get(i));
}}

}
publicstaticvoidmutate(arraylistfinal,arraylistfactored,stringa){
整数倍=0;
字符串持有者=”;
对于(int i=0;i=2)
加上(最终得到(i));
}
}
如果(倍数>1)
加上(持有人);
}
公共静态void simplify(ArrayList Factored,char a,ArrayList Main){
字符串temp=“”;
int size=Factored.size();
int-cnt=0;
int cnt2=0;
int holder=0;
系统输出打印项次(系数);
int-menial=0;
如果(带系数的.size()==0)
半月板=1;
否则{
for(inti=0;i=1)
移除(支架);
字符串temp1=“”;
int size1=带系数的.size();
对于(inti=0;i1)
半月板=5;
其他的
对于(int i=0;i

Edit2:我已经在上面添加了我的代码。我为之前的草率道歉,快结束时它变得相当混乱。带系数的arraylist将布尔表达式的所有元素分开,例如,第一个元素是aC,第二个元素是bC,等等。我的计划是找到重复的元素并尝试将其系数化,但在对所有这些进行编码之后,我意识到了惊人的逻辑错误。它必须比这更复杂,在这一点上我迷失在我自己的代码中。

我很难理解你的意思。你能更深入地谈谈你需要帮助的方面吗?也许把你现在的代码贴出来,你是如何在纸上简化它的;通过手动分解或使用k图?我还认为使用更正式的方法来否定符号更容易理解,例如
\u a
a'
,或
'a
。更清楚的是,它是对已知符号的否定,而不是对其他符号的否定。也许这只是一种偏好……你能提供你目前正在使用的代码吗?基本上,我只是想不出一种方法来编写一个简化的代码,这样程序就可以将任何布尔表达式或运算更改为最简单的形式。在纸上,我通过手动分解来简化它,我听说过k-映射,但我不熟悉它们。我也更喜欢使用“a”,但作业要求使用我前面提到的符号。我是一名高中生,所以我有点无知。