2011-11-01 24 views
0

我正在編寫一個哈希表並縮小了問題的來源。我的循環出了問題,但它沒有給我任何錯誤,所以我可以調試它

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?任何建議真的會被讚賞。

+2

錯誤,也許'total'小於'words.length'? – Howard

+0

它似乎沒有在任何地方初始化'total'。 –

+0

我聞到無限循環的可能性。有值可能會導致「標誌」永遠不會是假的,並且循環永遠不會結束(所以5和2都不會打印) – Nikki9696

回答

1

你沒有向我們展示完整的代碼,但從我能看到的唯一的解釋是,你在循環內但最外面的條件total >= words.length永遠不會滿足。

while(flag) { 
    if (...) { // condition never fulfilled 
    ...  // code never reached 
    } 
} 

因此,您的代碼在無限循環中運行,根本沒有做任何有用的操作。

2

你確定這行:

if(total>= words.length){ 

曾經判斷爲真?我認爲你永遠不會進入第一個if語句。

+0

如果該行永遠是假的,循環將永遠旋轉,因爲'if'之外沒有任何代碼可以改變'flag'。 –

1

你的邏輯是很危險的一個無限循環,因爲在

if{ 
    } 
else if { 
} 

您的標誌僅設置爲false,你永遠不設置它在其他地方。

另外,如果你的第一個,如果不是真的,你在無限循環在那裏輸入...

總是寫別人的時候,如果你寫......還是覺得應該發生什麼,當你的條件在一個if中是不正確的。這樣你會避免很多的bug ;-)

我的2美分

相關問題