我正在编写一个散列表,并缩小了问题的来源。
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?任何建议都会受到赞赏。
答案 0 :(得分:2)
你确定这一行:
if(total>= words.length){
曾经评估过真的吗?我想你永远不会进入第一个if语句。
答案 1 :(得分:1)
您没有向我们展示完整的代码,但从我可以看到的唯一解释是您在循环内部但是最外面的条件total >= words.length
永远不会实现。
while(flag) {
if (...) { // condition never fulfilled
... // code never reached
}
}
因此,您的代码在无限循环中运行,而根本没有做任何有用的事情。
答案 2 :(得分:1)
您的逻辑对于无限循环是危险的,因为您的标志仅在
中设置为falseif{
}
else if {
}
你永远不会把它放在其他地方。
另外,如果你的第一个if不是真的,你就进入一个无限循环......
当你写一个if时总是写一个else ...或者想一想当你的条件不是真的时会发生什么。这样你就可以避免很多bug; - )
我的2美分