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

📄 demo.java

📁 学习数据结构的最好辅助工具,快速帮助你熟悉数据结构的相关技术
💻 JAVA
字号:
import java.awt.*;

public class Demo extends Canvas 
{
	private int    m_iSleepTime = 80;
	private String m_sInitData;
	private char[] m_sData=new char[12];
	private int    m_iDataNum;
	private int    m_iNumLines=9;		//souceCode lines;
	
	private int    tempx;
	private int    tempy;
	private int	   basex=20;
	private int    basey=10;		
	private int    dx=30;		
	private int    dy=10;
		
	private int	   width=20;
	private int    height=30;
	
	private int	   m_iIndex;
	private int    m_jIndex;
	
	private int    m_iStep=-1;
	private int    m_jCur=-1;
	
	private boolean m_bStarted=false;
	private boolean m_bSortType=true;
	
	
	
	
	public void reset(String data,boolean bool)
	{
		m_sInitData=data;
		tempx=-1;
		tempy=-1;
		m_iIndex=-1;
		m_jIndex=-1;
		m_iStep=-1;
		m_jCur=-1;
		m_sData[0]=' ';
		m_bSortType=bool;
		for(int i=1;i<data.length()+1;i++)
			m_sData[i]=data.charAt (i-1);
		m_iDataNum=m_sInitData.length ();
		dx=300/m_iDataNum;
		m_bStarted=false;		
		repaint();
		//drawInit();
	}
	public void init()
	{	
		m_iDataNum=1;
		tempx=-1;
		tempy=-1;		
		m_bStarted=false;
		m_bSortType=true;
	}
	private void delay()
	{
		try{ Thread.sleep(m_iSleepTime); }
		catch(InterruptedException e){}
	}
	private boolean compare(char ch1,char ch2)
	{
		if(m_bSortType)
			return(ch1<ch2);
		else
			return(ch1>ch2);
	}
	private void drawInit()
	{			
		Graphics m_graph=getGraphics();		
		
		m_graph.drawString ("初始数据:",20,10);				
		
		Color bk=getBackground();
				
		for(int i=0;i<m_sInitData.length ();i++)
		{
			drawNode(m_sInitData.charAt (i),i+1,1,bk,Color.black ,m_graph);
		}			
	}
	
	private void drawNode(char ch,int i,int j,Color bkColor,Color fgColor,Graphics g)
	{		
	
	
		Color old=g.getColor ();
			
		g.drawRect (basex+i*dx, basey+j*dy, width, height);	
		g.setColor (bkColor);	
		g.fillRect (basex+i*dx+1, basey+j*dy+1, width-1, height-1);	
		
		char c[]={' ',' '};
		c[0]=ch;
			
		g.setColor (fgColor);
		g.drawChars(c,0,1,basex+i*dx+width/3+1,basey+j*dy+height*2/3);		
		g.setColor (old);			
	}
	
	public void drawArrow(char ch,int i,int j,Color color,Graphics g)
	{
		
		Color old=g.getColor ();
		g.setColor(color);
		char c[]={' ',' '};
		c[0]=ch;			
		
		int x=basex+i*dx+width/3+7;
		int y=basey+j*dy+height+5;
		g.drawChars(c,0,1,x-8,y+15);				
		g.drawLine (x,y,x,y+20);
		g.drawLine (x,y,x+2,y+5);
		g.drawLine (x,y,x-3,y+5);
		g.setColor (old);	
	}
	
	public void moveNode(char ch,int start,int end,Color bkColor, Color fgColor)
	{
		Graphics g=getGraphics();
	
		Color	bk=getBackground();	    
		Color	old=g.getColor();
		
		int     ti=start;
		int     tj=end;
		
		if(end==0)
		{
			ti=start;
			tj=10;
			while(tj>6)
			{
				g.setColor (bk);	
				g.fillRect (basex+ti*dx-1, basey+tj*dy-1, width+2, height+2);				
				g.setColor(old);
				drawNode(ch,ti,tj-1,bk,fgColor,g);
				delay();
				tj-=1;
			}
			while(ti>0)
			{				
				g.setColor (bk);	
				g.fillRect (basex+ti*dx-1, basey+tj*dy-1, width+2, height+2);				
				g.setColor(old);
				drawNode(ch,ti-1,tj,bk,fgColor,g);
				delay();
				ti-=1;
			}
			while(tj<10)
			{
				g.setColor (bk);	
				g.fillRect (basex+ti*dx-1, basey+tj*dy-1, width+2, height+2);				
				g.setColor(old);
				drawNode(ch,ti,tj+1,bk,fgColor,g);
				delay();
				tj+=1;
			}
			
		}
		else if(start==0)
		{
			ti=0;
			tj=10;
		
			while(tj>6)
			{
				g.setColor (bk);	
				g.fillRect (basex+ti*dx-1, basey+tj*dy-1, width+2, height+2);								
				g.setColor(old);	
				drawNode(m_sData[0],0,10,Color.cyan,Color.yellow,g);
				drawNode(ch,ti,tj-1,bk,fgColor,g);				
				delay();
				tj-=1;
			}
			while(ti<end)
			{				
				g.setColor (bk);	
				g.fillRect (basex+ti*dx-1, basey+tj*dy-1, width+2, height+2);				
				g.setColor(old);
				drawNode(ch,ti+1,tj,bk,fgColor,g);
				delay();
				ti+=1;
			}
			while(tj<10)
			{
				g.setColor (bk);	
				g.fillRect (basex+ti*dx-1, basey+tj*dy-1, width+2, height+2);				
				g.setColor(old);
				drawNode(ch,ti,tj+1,bk,fgColor,g);
				delay();
				tj+=1;
			}		
			
		}	
	}
	public void paint(Graphics g)
	{
		//Rectangle r=g.getClipBounds ();
		//g.clearRect (r.x,r.y,r.width ,r.height );
		drawInit();
		
		if(m_bStarted)
		{
			if(m_iStep==9)//over
			{
				g.drawString ("排序结果:",20,100);
				for(int i=1;i<m_iDataNum+1;i++)
					drawNode(m_sData[i],i,10,getBackground(),Color.black ,g);
				
			}
			else
			{
				drawNode(m_sData[0],0,10,Color.cyan ,Color.red ,g);	
				Color color;
				
				for(int i=1;i<m_iDataNum+1;i++)
				{
					if(i!=m_jCur)
					{
						if(i!=m_iIndex&&i!=m_jIndex) color=Color.black ;
						else            color=Color.yellow ;
						drawNode(m_sData[i],i,10,getBackground(),color,g);
					}
					
				}
				if(m_iIndex>=2)
					drawArrow('i',m_iIndex,10,Color.red,g);
				if(m_jIndex>0&&(m_jIndex!=m_iIndex))
					drawArrow('j',m_jIndex,10,Color.red,g); 
																
																
				
			}					
		}
		
	}
	
	
	public int proceed(int step)
	{
		
		int nextStep=0;
		switch(step)
		{
		case -1:    m_bStarted=true;
					m_iStep=0;
					nextStep=0;
					break;
			
		case 0:		m_bStarted=true;
					m_iStep =0;
					nextStep=2;
					break;
		case 2:		if(m_iIndex<=0&&2<m_iNumLines)					//start 
				   {
						m_iIndex=2;
						m_iStep=2;
						nextStep=4;
					}
					else if(m_iIndex<m_iDataNum)							//already begin
					{
						m_iIndex++;
						m_iStep=2;
						nextStep=4;
					}					
					else
					{
						m_iStep=9;
						nextStep=9;					
					}
					m_jIndex=-1;
					break;
		
		case 4:	   
					moveNode(m_sData[m_iIndex],m_iIndex,0,Color.gray,Color.yellow);					
					m_sData[0]=m_sData[m_iIndex];						
					
					nextStep=5;
					m_jIndex=m_iIndex-1;
					m_jCur=m_iIndex;
					m_iStep=4;
					break;
					
		case 5:     				
					//if(m_jIndex!=m_iIndex-1) m_jIndex--;	
					for(int i=0;i<3;i++)
					{
						drawNode(m_sData[0],0,10,Color.red ,Color.yellow ,getGraphics());
						drawNode(m_sData[m_jIndex],m_jIndex,10,Color.red ,Color.yellow ,getGraphics());					
						delay();
						delay();
						drawNode(m_sData[0],0,10,Color.cyan ,Color.yellow ,getGraphics());
						drawNode(m_sData[m_jIndex],m_jIndex,10,getBackground() ,Color.yellow ,getGraphics());					
						delay();
						delay();					
					}
					if(compare(m_sData[0],m_sData[m_jIndex]))
					{						
						nextStep=6;
					}
					else
						nextStep=7;
					break;
		case 6:	    
					m_sData[m_jIndex+1]=m_sData[m_jIndex];
					m_jCur=m_jIndex;
					m_iStep=6;
					nextStep=5;
					m_jIndex--;
					break;
		case 7:     
					moveNode(m_sData[0],0,m_jIndex+1,Color.gray,Color.yellow);
					m_sData[m_jIndex+1]=m_sData[0];
					m_jCur=-1;
					m_iStep=7;
					nextStep=8;
					break;
		case 8:		m_iStep=8;//m_iStep=2;
					nextStep=2;					
					break;
		case 9:		m_iStep=9;		
					nextStep=-1;
					break;
		
		}		
		repaint();
		return nextStep;
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -