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

来源:互联网 发布:淘宝优化关键词技巧 编辑:程序博客网 时间:2024/05/16 08:34


图结构 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)成功.





0 0
原创粉丝点击