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