📄 timepand.java.bak
字号:
}//if
//}
int d3,d4;
try
{
d3=Integer.valueOf(text3).intValue();
d4=Integer.valueOf(text4).intValue();
if(d4<=d3){
dialog.setTitle("错误!");
dialog.setSize(400,150);
dialog.setForeground(Color.black);
result.setText("初始区间左端点应该小于初始区间右端点!");
dialog.show();
return;
}
if(bh2(d3,d4,c3.getSelectedItem(),c4.getSelectedItem(),s2)==1)return;//若包含则返回
//{数据入栈
if(s2.top>=s2.stacksize)
{
dialog.setTitle("错误");
dialog.setSize(400,150);
dialog.setForeground(Color.black);
result.setText("判断栈已满。");
dialog.show();
return;
}
s2.sqj[s2.top]=new Qj(d3,d4,c3.getSelectedItem(),c4.getSelectedItem());
s2.top++;
//}
}//try
catch (NumberFormatException ne)
{
dialog.setTitle("error");
dialog.setSize(400,150);
dialog.setForeground(Color.red);
result.setText("输入不合法!请输入一个整型数!");
dialog.show();
return;
}
//{将区间添加进判断区间
if(pdqjnum==0){
f2.setText(f2.getText()+c3.getSelectedItem()+text3+","+text4+c4.getSelectedItem());
pdqjnum++;
}
else
f2.setText(f2.getText()+"∨"+c3.getSelectedItem()+text3+","+text4+c4.getSelectedItem());
//}
//t1.setText("");
}
};//bttj2al
class Dokevent implements ActionListener//
{
public void actionPerformed(ActionEvent e)
{
dialog.hide();
}
};
class Bokclear implements ActionListener//确认按钮和重置按钮的事件
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==btclear)//btclear
{
f1.setText("");f2.setText("");
s1.top=0;s2.top=0;
pdqjnum=0;csqjnum=0;
}//btclear
else if(e.getSource()==btok)//btok
{
if(s1.top==0||s2.top==0)
{
dialog.setTitle("错误");
dialog.setSize(400,150);
dialog.setForeground(Color.black);
result.setText("至少有一个区间为空");
dialog.show();
return;
}//if
//pd(s1,s2);
pd2(s1,s2);
}//btok
}//btokal
};//btokal
//bh只是简单地显示输入的区间是否被包含
//bh2能显示已包含的区间的信息,但加大了运算时间,请根据需要来选用
//判断输入区间是被否包含
int bh(double d3,double d4,String left2,String right2,stack s)
{
double d1,d2;
String left1,right1;
for(int k=0;k<s.top;k++)
{
d1=s.sqj[k].i;d2=s.sqj[k].j;
left1=s.sqj[k].left;right1=s.sqj[k].right;
//完全不包含情况
if(d4<d1||d4==d1&&(left1.equals("(")||left1.equals("[")&&right2.equals(")"))||d3>d2||d3==d2&&(right1.equals(")")||right1.equals("]")&&left2.equals("(")) )continue;
else
{
dialog.setTitle("警告");
result.setText("输入的区间有部分或全部与之前输入的区间有重复,请检查后再重新输入");
dialog.pack();
dialog.show();
return 1;
}
}//for
return 0;
}//bh
//判断输入区间是被否包含(改进版)
int bh2(double d3,double d4,String left2,String right2,stack s)
{
stack ss=new stack();//储存已被包含的区间的信息
stack fzs=new stack();//
double d1,d2;
String left1,right1;
while(true)
{
for(int k=0;k<s.top;k++)
{
d1=s.sqj[k].i;d2=s.sqj[k].j;
left1=s.sqj[k].left;right1=s.sqj[k].right;
//完全包含情况
if( (d2>d4)||(d2==d4&&right1.equals(right2))||d2==d4&&( right2.equals(")")&&right1.equals("]")||right1.equals(right2) ) )
{
if(d1<d3||d1==d3&&( left2.equals("(")&&left1.equals("[")||left1.equals(left2) ))
{
ss.sqj[ss.top++]=new Qj(d3,d4,left2,right2);
break;
}
}//if
//完全不包含情况
if(d4<d1||d4==d1&&(left1.equals("(")||left1.equals("[")&&right2.equals(")"))||d3>d2||d3==d2&&(right1.equals(")")||right1.equals("]")&&left2.equals("(")) )continue;
//部分包含情况
//判断区间一分为二
if((d2<d4||d2==d4&&right1.equals(")")&&right2.equals("]"))&&(d1>d3||d1==d3&&left1.equals("(")&&left2.equals("[")))
{//if
//System.out.println("1to2");
String right;
ss.sqj[ss.top++]=new Qj(d1,d2,left1,right1);//已被包含的区间入栈
if(left1.equals("("))right="]";
else right=")";
//左边的区间入栈
fzs.sqj[fzs.top++]=new Qj(d3,d1,left2,right);
d3=d2;
if(right1==")")left2="[";
else left2="(";
continue;
}//if
//判断区间分为1
if((d2<d4||d2==d4&&right1.equals(")")&&right2.equals("]"))&&(d1<d3||d1==d3&&(left1.equals("[")||left1.equals("(")&&left2.equals("("))))
{
// System.out.println("1to1");
ss.sqj[ss.top++]=new Qj(d3,d2,left2,right1);//已被包含的区间入栈
d3=d2;
if(right1==")")left2="[";
else left2="(";
//删去不完全的点
if(d3==d4&&(left2.equals("(")||right2.equals(")"))){break;}
continue;
}
else if((d1>d3||d1==d3&&left1.equals("(")&&left2.equals("["))&&(d2>d4||d2==d4&&(right1.equals("]")||right1.equals(")")&&right2.equals(")"))))
{
// System.out.println("1to1");
ss.sqj[ss.top++]=new Qj(d1,d4,left1,right2);//已被包含的区间入栈
d4=d1;
if(left1.equals("("))right2="]";
else right2=")";
//删去不完全的点
if(d3==d4&&(left2.equals("(")||right2.equals(")"))){break;}
continue;
}
}//for
if(fzs.top==0)break;
fzs.top--;
int t=fzs.top;
d3=fzs.sqj[t].i;d4=fzs.sqj[t].j;left2=fzs.sqj[t].left;right2=fzs.sqj[t].right;
}//while
if(ss.top!=0)
{
String t="输入的区间中有以下区间与以前输入的重复:";
for(int k=0;k<ss.top;k++)
t=t+ss.sqj[k].left+ss.sqj[k].i+","+ss.sqj[k].j+ss.sqj[k].right+";";
ss.top=0;
dialog.setTitle("警告");
result.setText(t+"请检查后再重新输入");
dialog.pack();
dialog.show();
return 1;
}//if
return 0;
}
//pd简单显示包含不包含,而且对于特殊情况,可能出错
//pd2增加了在不被包含时显示不被包含的区间的信息,但加大了运算时间
//请根据需要选用
int pd(stack s1,stack s2)//进行判断
{
int i,j;
int yn=0;
for(i=0;i<s2.top;i++)//for1
{
//{数据初始化
yn=0;
String left2,right2;
double d3,d4;
left2=s2.sqj[i].left;
right2=s2.sqj[i].right;
d3=s2.sqj[i].i;
d4=s2.sqj[i].j;
//}
for(j=0;j<s1.top;j++)//for2
{
//{数据初始化
String left1,right1;
double d1,d2;
left1=s1.sqj[j].left;
right1=s1.sqj[j].right;
d1=s1.sqj[j].i;
d2=s1.sqj[j].j;
//}
//{进行判断
if( (d2>d4)||(d2==d4&&right1.equals(right2))||d2==d4&&( right2.equals(")")&&right1.equals("]")||right1.equals(right2) ) )
{
if(d1<d3||d1==d3&&( left2.equals("(")&&left1.equals("[")||left1.equals(left2) )){yn=1;break;}
}//if
//}
}//for2
if(yn==0)break;
}//for1
dialog.setTitle("结果");
dialog.setSize(400,200);
if(yn==1)
result.setText("包含");
else
result.setText("不包含");
dialog.show();
return 1;
}//pd
void pd2(stack s1,stack s2)//改进的区间判断
{
stack s3=new stack(),s4=new stack();
int i,j;
int bh=0;//有没有包含标志
for(i=0;i<s2.top;i++)//复制栈
{
s3.sqj[i]=new Qj(s2.sqj[i].i,s2.sqj[i].j,s2.sqj[i].left,s2.sqj[i].right);
s3.top=s2.top;
}//for
i=0;
while(s3.top!=0)
{//while
bh=0;
String left2,right2;
double d3,d4;
//获得栈顶元素
s3.top--;
left2=s3.sqj[s3.top].left;
right2=s3.sqj[s3.top].right;
d3=s3.sqj[s3.top].i;
d4=s3.sqj[s3.top].j;
for(j=0;j<s1.top;j++)
{//for2
String left1,right1;
double d1,d2;
left1=s1.sqj[j].left;
right1=s1.sqj[j].right;
d1=s1.sqj[j].i;
d2=s1.sqj[j].j;
//进行判断
//完全包含情况
if( (d2>d4)||(d2==d4&&right1.equals(right2))||d2==d4&&( right2.equals(")")&&right1.equals("]")||right1.equals(right2) ) )
{
if(d1<d3||d1==d3&&( left2.equals("(")&&left1.equals("[")||left1.equals(left2) )){bh=1;break;}
}//if
//完全不包含情况
if(d2<d3||d2==d3&&(left2.equals("(")||right1.equals(")"))||d4<d1||d1==d4&&(left1.equals("(")||right2.equals(")"))){continue;}
//部分包含情况
//判断区间一分为二
if((d2<d4||d2==d4&&right1.equals(")")&&right2.equals("]"))&&(d1>d3||d1==d3&&left1.equals("(")&&left2.equals("[")))
{//if
//System.out.println("1to2");
String right;
if(left1.equals("("))right="]";
else right=")";
//判断辅助栈是否满了
if(s3.top>=s3.stacksize)
{
dialog.setTitle("警告");
result.setText("处理过程中辅助栈已满,请减少判断区间的区间数再进行判断");
dialog.pack();
dialog.show();
return;
}
//左边的区间入栈
s3.sqj[s3.top++]=new Qj(d3,d1,left2,right);
d3=d2;
if(right1==")")left2="[";
else left2="(";
continue;
}//if
//判断区间分为1
if((d2<d4||d2==d4&&right1.equals(")")&&right2.equals("]"))&&(d1<d3||d1==d3&&(left1.equals("[")||left1.equals("(")&&left2.equals("("))))
{
// System.out.println("1to1");
d3=d2;
if(right1==")")left2="[";
else left2="(";
//删去不完全的点
if(d3==d4&&(left2.equals("(")||right2.equals(")"))){bh=1;break;}
continue;
}
else if((d1>d3||d1==d3&&left1.equals("(")&&left2.equals("["))&&(d2>d4||d2==d4&&(right1.equals("]")||right1.equals(")")&&right2.equals(")"))))
{
d4=d1;
if(left1.equals("("))right2="]";
else right2=")";
//删去不完全的点
if(d3==d4&&(left2.equals("(")||right2.equals(")"))){bh=1;break;}
continue;
}
}//for2
//不被包含的区间入栈
if(bh==0){
//判断辅助栈是否满了
if(s4.top>=s4.stacksize)
{
dialog.setTitle("警告");
result.setText("处理过程中辅助栈已满,请减少判断区间的区间数再进行判断");
dialog.pack();
dialog.show();
return;
}
s4.sqj[s4.top++]=new Qj(d3,d4,left2,right2);
}
//if(s3.top>=1)System.out.println(i+":"+s3.sqj[s3.top-1].left+s3.sqj[s3.top-1].i+s3.sqj[s3.top-1].j+s3.sqj[s3.top-1].right);
}//while
dialog.setTitle("结果");
dialog.setSize(400,200);
if(s4.top==0)result.setText("包含");
else {
String r="不包含,不被包含的区间为:";
//打印不被包含的栈
while(s4.top!=0)
{//while
s4.top--;
int t=s4.top;
String ss=" ";
r=r+" "+s4.sqj[t].left+ss.valueOf(s4.sqj[t].i)+","+ss.valueOf(s4.sqj[t].j)+s4.sqj[t].right;
}//while
result.setText(r);
s4.top=0;
}//else
dialog.pack();
dialog.show();
}//pd2
}//newframe主函数
class Qj//定义区间
{
public Qj()
{
i=0;
j=0;
left="[";
right="]";
}
public Qj(double i,double j,String left,String right)
{
this.i=i;
this.j=j;
this.left=left;
this.right=right;
}
public double i;
public double j;
public String left;
public String right;
};//Qj
class stack //定义栈
{
Qj sqj[];
int top;
int stacksize;
public stack()
{
sqj=new Qj[50];
top=0;
stacksize=50;
}
};//stack
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -