我正在写一个哈希表,并且已经缩小了问题的来源。
void put(String word, int line)
{
boolean flag = true;
int val = getValue(word);
val = val%10;
System.out.println(val);
while ( flag )
{
if( total >= words.length )
{
System.out.println("2");
if( words[val] == null )
{
System.out.println("3");
total++;
words[val] = new Word(word);
words[val].addLine(line);
System.out.println(word);
flag = false;
}
else if ( words[val].equals(word) )
{
System.out.println("4");
words[val].addOne();
words[val].addLine(line);
flag = false;
}
val++;
if ( val == words.length )
val=0;
System.out.println("5");
}
}
System.out.println("2");
}它只会打印出val,然后继续给我一个装货标志。是不是循环出了什么问题?但如果是这样,为什么不至少打印出2-5个呢?任何建议都将不胜感激。
发布于 2011-11-02 02:39:06
您没有向我们展示完整的代码,但从我所看到的情况来看,唯一的解释是您在循环中,但是最外面的if条件total >= words.length永远不会被满足。
while(flag) {
if (...) { // condition never fulfilled
... // code never reached
}
}因此,你的代码在无限循环中运行,没有做任何有用的事情。
发布于 2011-11-02 02:37:01
你确定这一行:
if(total>= words.length){是否曾经评估为真?我认为您永远不会输入第一个if语句。
发布于 2011-11-02 02:41:22
您的逻辑对于无限循环是危险的,因为您的标志仅在
if{
}
else if {
}而且你永远不会把它放在别的地方。
另外,如果你的第一个if不是真的,你就在那里进入一个无限循环...
当你写一个if时,总是写一个else ...或者想一想当你的条件在if中不为真时会发生什么。这样可以避免很多bug ;-)
我的2分
https://stackoverflow.com/questions/7971103
复制相似问题