涂料组件上的JAVA无限循环?

时间:2017-05-23 22:30:13

标签: java while-loop infinite-loop paintcomponent

所以,我有一个程序记录并显示哈希表中的冲突。我已经记录了碰撞事件 - 数据碰撞了什么,它应该在哪里,以及它在表中的位置。

问题是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;
                }
            }
        }  
    }

非常感谢您的帮助和意见!

2 个答案:

答案 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.
    }  
}