2012年(106)
分类: Java
2012-05-08 01:22:47
设计一个程序能够输入一个复合命题,输出复合命题的真值表。
提示:此问题要求解决
(1) 命题的输入表达,
(2) 命题的存储数据结构,
(3) 基于数据结构的命题真值计算,
(4) 真值表的输出表达,
(5) 任意命题的真值表计算。
import java.awt.*;
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
public class A extends JFrame implements ActionListener{
// ¬a ∧b ∨c ->d <->e ﹙f ﹚g p q r
JButton button1,button2,button3,button4,button5,button6,button7,button8,button9,button10,button11,button12,button13;
JFrame frame;
JFrame frame2;
JTextField textField;
static char[] s=new char[30];
static int n=0;
public static void main(String args[]){
new A();
}
A(){
frame=new JFrame();
frame.setTitle("复合命题计算器");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600,500);
frame.setVisible(true);
button1=new JButton("P");
button1.addActionListener(this);
button2=new JButton("Q");
button2.addActionListener(this);
button3=new JButton("R");
button3.addActionListener(this);
button4=new JButton("¬");
button4.addActionListener(this);
button5=new JButton("∧");
button5.addActionListener(this);
button6=new JButton("∨");
button6.addActionListener(this);
button7=new JButton("->");
button7.addActionListener(this);
button8=new JButton("<->");
button8.addActionListener(this);
button9=new JButton("(");
button9.addActionListener(this);
button10=new JButton(")");
button10.addActionListener(this);
button11=new JButton("Delete");
button11.addActionListener(this);
button12=new JButton("ClearAll");
button12.addActionListener(this);
button13=new JButton("确认");
button13.addActionListener(this);
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel();
p1.setLayout(new GridLayout(3,1));
p2.setLayout(new GridLayout(4,2));
p3.setLayout(new GridLayout(2,1));
p1.add(button1);
p1.add(button2);
p1.add(button3);
p2.add(button4);
p2.add(button5);
p2.add(button6);
p2.add(button7);
p2.add(button8);
p2.add(button9);
p2.add(button10);
p3.add(button11);
p3.add(button12);
p2.add(button13);
textField=new JTextField(30);
Container contentPane=frame.getContentPane();
contentPane.add(textField,BorderLayout.NORTH);
contentPane.add(p1,BorderLayout.WEST);
contentPane.add(p2,BorderLayout.CENTER);
contentPane.add(p3,BorderLayout.EAST);
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==button1){
textField.setText(textField.getText()+"P ");
s[n++]='P';
}
if(e.getSource()==button2){
textField.setText(textField.getText()+"Q ");
s[n++]='Q';
}
if(e.getSource()==button3){
textField.setText(textField.getText()+"R ");
s[n++]='R';
}
if(e.getSource()==button4){
textField.setText(textField.getText()+"¬ ");
s[n++]='a';
}
if(e.getSource()==button5){
textField.setText(textField.getText()+"∧ ");
s[n++]='b';
}
if(e.getSource()==button6){
textField.setText(textField.getText()+"∨ ");
s[n++]='c';
}
if(e.getSource()==button7){
textField.setText(textField.getText()+"->");
s[n++]='d';
}
if(e.getSource()==button8){
textField.setText(textField.getText()+"<-->");
s[n++]='e';
}
if(e.getSource()==button9){
textField.setText(textField.getText()+"( ");
s[n++]='f';
}
if(e.getSource()==button10){
textField.setText(textField.getText()+") ");
s[n++]='g';
}
if(e.getSource()==button11){
if((textField.getText()).length()==1) {textField.setText("");n=0;}
else {textField.setText(textField.getText().substring(0,(textField.getText()).length()-2));n--;}
}
if(e.getSource()==button12){
textField.setText("");
n=0;
}
if(e.getSource()==button13){
s[n]='*';
frame2=new JFrame("真值表");
frame2.setLocationRelativeTo(null);
frame2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame2.setSize(600,500);
frame2.setVisible(true);
JPanel p4=new JPanel();
p4.setLayout(new GridLayout(9,4));
JButton button14=new JButton("P");
JButton button15=new JButton("Q");
JButton button16=new JButton("R");
JButton button17=new JButton(textField.getText());
JButton button18=new JButton();
JButton button19=new JButton();
JButton button20=new JButton();
JButton button21=new JButton();
JButton button22=new JButton();
JButton button23=new JButton();
JButton button24=new JButton();
JButton button25=new JButton();
JButton button26=new JButton();
JButton button27=new JButton();
JButton button28=new JButton();
JButton button29=new JButton();
JButton button30=new JButton();
JButton button31=new JButton();
JButton button32=new JButton();
JButton button33=new JButton();
JButton button34=new JButton();
JButton button35=new JButton();
JButton button36=new JButton();
JButton button37=new JButton();
JButton button38=new JButton();
JButton button39=new JButton();
JButton button40=new JButton();
JButton button41=new JButton();
JButton button42=new JButton();
JButton button43=new JButton();
JButton button44=new JButton();
JButton button45=new JButton();
JButton button46=new JButton();
JButton button47=new JButton();
JButton button48=new JButton();
JButton button49=new JButton();
p4.add(button14);
p4.add(button15);
p4.add(button16);
p4.add(button17);
p4.add(button18);
p4.add(button19);
p4.add(button20);
p4.add(button21);
p4.add(button22);
p4.add(button23);
p4.add(button24);
p4.add(button25);
p4.add(button26);
p4.add(button27);
p4.add(button28);
p4.add(button29);
p4.add(button30);
p4.add(button31);
p4.add(button32);
p4.add(button33);
p4.add(button34);
p4.add(button35);
p4.add(button36);
p4.add(button37);
p4.add(button38);
p4.add(button39);
p4.add(button40);
p4.add(button41);
p4.add(button42);
p4.add(button43);
p4.add(button44);
p4.add(button45);
p4.add(button46);
p4.add(button47);
p4.add(button48);
p4.add(button49);
frame2.add(p4);
int a=0;
int b=0;
int c=0;
for(int i=0;i
if(s[i]=='Q') b=1;
if(s[i]=='R') c=1;
}
if(a==1&&b==1&&c==1){
char[] t=new char[30];
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='Q')t[i]='F';
if(t[i]=='R')t[i]='F';
}
button18.setText("F");
button19.setText("F");
button20.setText("F");
if(Simplify(t)[0]!='*')
button21.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='Q')t[i]='F';
if(t[i]=='R')t[i]='F';
}
button22.setText("T");
button23.setText("F");
button24.setText("F");
if(Simplify(t)[0]!='*')
button25.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='Q')t[i]='T';
if(t[i]=='R')t[i]='F';
}
button26.setText("F");
button27.setText("T");
button28.setText("F");
if(Simplify(t)[0]!='*')
button29.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='Q')t[i]='F';
if(t[i]=='R')t[i]='T';
}
button30.setText("F");
button31.setText("F");
button32.setText("T");
if(Simplify(t)[0]!='*')
button33.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='Q')t[i]='F';
if(t[i]=='R')t[i]='T';
}
button34.setText("F");
button35.setText("T");
button36.setText("T");
if(Simplify(t)[0]!='*')
button37.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='Q')t[i]='F';
if(t[i]=='R')t[i]='T';
}
button38.setText("T");
button39.setText("F");
button40.setText("T");
if(Simplify(t)[0]!='*')
button41.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='Q')t[i]='T';
if(t[i]=='R')t[i]='F';
}
button42.setText("T");
button43.setText("T");
button44.setText("F");
if(Simplify(t)[0]!='*')
button45.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='Q')t[i]='T';
if(t[i]=='R')t[i]='T';
}
button46.setText("T");
button47.setText("T");
button48.setText("T");
if(Simplify(t)[0]!='*')
button49.setText(String.valueOf(Simplify(t)[0]));
}
if(a==1&&b==1&&c==0){
char[] t=new char[30];
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='Q')t[i]='F';
}
button18.setText("F");
button19.setText("F");
if(Simplify(t)[0]!='*')
button21.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='Q')t[i]='T';
}
button22.setText("F");
button23.setText("T");
if(Simplify(t)[0]!='*')
button25.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='Q')t[i]='F';
}
button26.setText("T");
button27.setText("F");
if(Simplify(t)[0]!='*')
button29.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='Q')t[i]='T';
}
button30.setText("T");
button31.setText("T");
if(Simplify(t)[0]!='*')
button33.setText(String.valueOf(Simplify(t)[0]));
}
if(a==1&&b==0&&c==1){
char[] t=new char[30];
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='R')t[i]='F';
}
button18.setText("F");
button20.setText("F");
if(Simplify(t)[0]!='*')
button21.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='R')t[i]='T';
}
button22.setText("F");
button24.setText("T");
if(Simplify(t)[0]!='*')
button25.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='R')t[i]='F';
}
button26.setText("T");
button28.setText("F");
if(Simplify(t)[0]!='*')
button29.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='R')t[i]='T';
}
button30.setText("T");
button32.setText("T");
if(Simplify(t)[0]!='*')
button33.setText(String.valueOf(Simplify(t)[0]));
}
if(a==0&&b==1&&c==1){
char[] t=new char[30];
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='R')t[i]='F';
}
button19.setText("F");
button20.setText("F");
if(Simplify(t)[0]!='*')
button21.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='R')t[i]='T';
}
button23.setText("F");
button24.setText("T");
if(Simplify(t)[0]!='*')
button25.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='R')t[i]='F';
}
button27.setText("T");
button28.setText("F");
if(Simplify(t)[0]!='*')
button29.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
if(t[i]=='R')t[i]='T';
}
button31.setText("T");
button32.setText("T");
if(Simplify(t)[0]!='*')
button33.setText(String.valueOf(Simplify(t)[0]));
}
if(a==1&&b==0&&c==0){
char[] t=new char[30];
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
}
button18.setText("F");
if(Simplify(t)[0]!='*')
button21.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
}
button22.setText("T");
if(Simplify(t)[0]!='*')
button25.setText(String.valueOf(Simplify(t)[0]));
}
if(a==0&&b==1&&c==0){
char[] t=new char[30];
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
}
button19.setText("F");
if(Simplify(t)[0]!='*')
button21.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
}
button23.setText("T");
if(Simplify(t)[0]!='*')
button25.setText(String.valueOf(Simplify(t)[0]));
}
if(a==0&&b==0&&c==1){
char[] t=new char[30];
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
}
button20.setText("F");
if(Simplify(t)[0]!='*')
button21.setText(String.valueOf(Simplify(t)[0]));
System.arraycopy(s,0,t,0,s.length);
for(int i=0;i
}
button24.setText("T");
if(Simplify(t)[0]!='*')
button25.setText(String.valueOf(Simplify(t)[0]));
}
}
}
static char[] Simplify(char[] a) {
for(int i=0;i
int j=i;
for(;j
char[] b=new char[j-i+1];
System.arraycopy(a,i+1,b,0,j-i-1);
a[i]=OO(b);
if(i==a.length-j+i-1) {a[i+1]='*';break;}
for(int k=i+1;k
}
}
for(int i=0;i
if(a[i+1]=='T') a[i]='F';
else a[i]='T';
if(i==a.length-2) {a[i+1]='*';break;}
for(int k=i+1;k
}
}
for(int i=0;i
if(i==0) a[0]='*';
else{
if(a[i-1]=='T'&&a[i+1]=='T') a[i-1]='T';
else a[i-1]='F';
if(i==a.length-2) {a[i]='*';break;}
for(int k=i;k
}
}
}
for(int i=0;i
if(i==0) a[0]='*';
else{
if(a[i-1]=='T'||a[i+1]=='T') a[i-1]='T';
else a[i-1]='F';
if(i==a.length-2) {a[i]='*';break;}
for(int k=i;k
}
}
}
for(int i=0;i
if(i==0) a[0]='*';
else{
if(a[i-1]=='T'&&a[i+1]=='F') a[i-1]='F';
else a[i-1]='T';
if(i==a.length-2) {a[i]='*';break;}
for(int k=i;k
}
}
}
for(int i=0;i
if(i==0) a[0]='*';
else{
if(a[i-1]==a[i+1]) a[i-1]='T';
else a[i-1]='F';
if(i==a.length-2) {a[i]='*';break;}
for(int k=i;k
}
}
}
return a;
}
//括号内部
static char OO(char[] a){
int k=0;
for(int i=0;i
k++;
if(k!=0) a=Simplify(a);
return a[0];
}
}