⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timepand.java.bak

📁 一个十分好的java基础学习的课件
💻 BAK
📖 第 1 页 / 共 2 页
字号:
		}//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 + -