程序调试记录(纯自用)

本文记录了我在程序调试过程中的关键步骤和实用技巧,包括如何定位问题、使用调试工具以及解决问题的策略,旨在提升软件开发中的问题解决能力。
摘要由CSDN通过智能技术生成
Stack类测试:
在测试Stck类型的变量内容是否正确时,经常会通过把所有值pop出来输出的方法,这样容易造成一个问题就是,栈已经被弄空了,以后再用的时候就会是一个空栈。所以,栈类型的变量测试完了以后及的把测试部分注释掉。或者查一下有没有好的方法用来测试栈

2017.11.15
//逻辑错误:版本v2,更改NodeRank类的rank方法,但是节点排名值得计算结果跟v1版本不一致,
//修改:map.put(i, t+0.4*nov(i,j)*map.get(i));===〉map.put(i, t+0.4*nov(i,j)*map.get(j));


开始考虑的是用queue存储最终的节点排名,把队列变量以参数的方式传输到finalRank()函数,这样先进先出后来用到映射过程中就可以
现在又想,就用ArrayList存储,按照value排名,然后下标从1开始遍历,得到跟queue一样的效果。

2017.11.18
今天需要处理两个图了,由于NodeRank类里面之前把g定义成了static,发现在main里面对g分别用两个图赋值,只按照最后一次赋值的来,而且啊,程序都需运行第一次赋值之后的rank方法。


code:


System.out.println("这是第一个start");
NodeRank.g=g2;


rank=NodeRank.rank();
System.out.println("这是第一个rank");
NodeRank.g=g;
rank2=NodeRank.rank();
System.out.println("这是第二个rank");


result:


这是第一个start
这是第一个rank
这是第二个rank
排名结果:2--0.3479683489497371
排名结果:0--0.28652638523658425
排名结果:1--0.20537981498161176




处理:只能是把g定义成普通的,然后再用构造函数初始化g,这样对于不同的图就有了相应的rank类。
注意-----后来发现,我的测试输出可能是有问题的,所以上面说的g是static时候只按照第二次赋值的说法可能有误,记住退回到v2版本去看看到底是不是只按照最后一次赋值的处理,在v2中,g还是static。由于发现把g定义成非静态处理以后似乎更好所以没有退回去检测。再后来,我发现好像只需要给一个图排序,也就是VNR的图,现在想想弄成静态的也可以,再再后来,又想,是要有多个VNR的,哎哟,问题好像更多了呢。


问题:测试的时候发现,会映射到重复的节点上。
解决:对于物理网络节点,添加一个标志位,已经被映射过的就干脆因为不符合要求而直接不被加入备选项中。这个标志位对于一个网络请求的所有节点映射过程中起作用的,所以要声明在遍历VNR节点之前。


主动排查发现:sim这个数组,对于一个VNR中的每一个节点都要进行一次更新,所以一定一定要声明在里面,(代码中有一个声明被注释掉了,可以注意下),这样上次节点的结果才不会影响这次的。


结果不理想,排查发现:一个超级大的逻辑错误,我的方法里面,只传入了物理网络而没有虚拟网络,关于虚拟网络只是传入了节点下标和排名值,但是我在方法内部,同时需要获得物理网络cpu和虚拟网络cpu,在我想要虚拟网络cpu的时候,我是用物理网络拓扑的g,还有虚拟网络拓扑的节点下标去查的,这个根本没有任何含义!!傻子傻子傻子!!!
解决:给方法添加一个参数,传递进去虚拟网络拓扑咯。总感觉还有别的办法,但是哪个更好却不知道了。


2017.11.19(ma
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值