所以,我有一个程序记录并显示哈希表中的冲突。我已经记录了碰撞事件 - 数据碰撞了什么,它应该在哪里,以及它在表中的位置。
问题是paintcomponent似乎陷入无限循环。我无法弄清楚while循环的哪一部分。
我已经尝试删除while循环,但这给了我一个编译时错误。 我也尝试在if语句中添加一个返回值,但这只能给出x个崩溃量中的1个值。
这是我的代码:
public void paintComponent (Graphics g) {
int xpos = 20, ypos = 30;
crash = 0;
g.setFont(plainfont);
g.drawString("Hash Crash count is: " + crash, xpos, ypos);
while(hashtable != null){
for (String name : names) {
int start = hashtable.hashFunc3(name); //locates where data must be
int end = hashtable.locateCrash(name); //locates where data is found
if (start != end) {
ypos += 20;
crash++;
g.drawString("Hash Crash:", xpos, ypos);
g.drawString(name, 100, ypos);
g.drawString("should be at", 200, ypos);
g.drawString(Integer.toString(start), 300, ypos);
g.drawString("found at", 350, ypos);
g.drawString(Integer.toString(end), 400, ypos);
//return;
}
}
}
}
非常感谢您的帮助和意见!
答案 0 :(得分:0)
没有HashMap
设置为null
的转义案例。你需要像if(start == end) hashtable = null;
这样的东西来打破循环。
答案 1 :(得分:0)
找到答案。也许不是最好的但是......
public void paintComponent (Graphics g) {
int xpos = 20, ypos = 30;
crash = 0;
g.setFont(plainfont);
g.drawString("Hash Crash count is: " + crash, xpos, ypos);
while(hashtable != null){
for (String name : names) {
int start = hashtable.hashFunc3(name); //locates where data must be
int end = hashtable.locateCrash(name); //locates where data is found
if (start != end) {
ypos += 20;
crash++;
g.drawString("Hash Crash:", xpos, ypos);
g.drawString(name, 100, ypos);
g.drawString("should be at", 200, ypos);
g.drawString(Integer.toString(start), 300, ypos);
g.drawString("found at", 350, ypos);
g.drawString(Integer.toString(end), 400, ypos);
}
}
break; //<-- needed a break; after for loop.
}
}