捉虫记 单步跟踪 条件断点 变量查看实践


图结构 C++转java 


int Locate_Vex(String v)  
	    {  
	        for(int i=0;i<vexnum;i++)  
	        {  
	            if(xlist[i].data==v){
	            	return i;  
	            	}                     	            
	        }   
	    	return -1;	 
	    }  

void CreateDG_OLG()  
	    {  
	        //构造有向图  
	        String v1,v2;  
	        int i,j,k;  
	        System.out.println("输入顶点数和边的数目:");  
	        Scanner input = new Scanner(System.in);
	        vexnum = input.nextInt();
	        arcnum =  input.nextInt(); 
	          
	        while(vexnum>maxnum)       
	        {  
	        	System.out.println("顶点数目大于最大限制,请重新输入:");  
	            vexnum=input.nextInt(); ;  
	        }  
	  
	        System.out.println("输入各个顶点的名称:");  
	        for(i=0;i<vexnum;i++)  
	        {  
	            xlist[i].data=input.next();
	            xlist[i].firstin=null;  
	            xlist[i].firstout=null;  
	        }  
	          
	        for(k=0;k<arcnum;k++)  
	        {  
	        	System.out.println("输入第"+k+1+"条边的两个顶点(尾—>头的顺序):");
	            v1=input.next();
	            v2=input.next();  
	            i=Locate_Vex(v1,xlist,vexnum);  
	            j=Locate_Vex(v2,xlist,vexnum);  
	              
	           while(i == -1 || j == -1)  
	            {  
	            	 System.out.println("结点位置输入错误,重新输入: ");  
	            	v1=input.next();
	 	            v2=input.next();    
	                i=Locate_Vex(v1,xlist,vexnum);  
	                j=Locate_Vex(v2,xlist,vexnum);     
	            }        
	              
	            ArcBox p=new ArcBox();  
	            p.tailvex=i;  
	            p.headvex=j;  
	            p.hlink=xlist[j].firstin;  
	            p.tlink=xlist[i].firstout;  
	            xlist[i].firstout=xlist[j].firstin=p;  
	        }  
	  
	        System.out.println("有向图构造完成\n");  
	        input.close();
	    }  


两个函数都设置断点,查看 

vexnum    arcnum
xlist    i    j    v1   v2 变量的值. 单步执行

输入 5,5

vexnum    arcnum


v1 v2 v3 v4 v5  xlist  0-4 data  变为  v1 v2 v3 v4 v5

输入 v1 v2 进入

<span style="font-size:14px;">int Locate_Vex(String v)  </span>
最后结果为i j  为 -1

 while(i == -1 || j == -1)  
           {  
            System.out.println("结点位置输入错误,重新输入: ");  
            v1=input.next();
           v2=input.next();    
               i=Locate_Vex(v1);  
               j=Locate_Vex(v2);     
           }        

注释后

引发 p 抛出异常 java.lang.ArrayIndexOutOfBoundsException:

问题原因  Locate_Vex();函数实现问题。

条件断点   单步执行 

 int Locate_Vex(String v)  
	    {  
	        for(int i=0;i<vexnum;i++)  
	        {  
	            if(xlist[i].data==v){
	            	return i;  
	            	}                     	            
	        }   
	    	return -1;	 
	    }  

 if(xlist[i].data==v) 下面的return i;从来没有被执行 条件断点  v=v1  的确是v1时候断点了。这是什么原因呢.

== 与equals   ==判断是否同一对象   equals 判断是否相等.

 if(xlist[i].data.equals(v)成功.


 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值