2014-10-01 77 views
0

不完全確定如何解釋這個問題。 我正在寫一個拼寫檢查程序,它讀取文本文件中的單詞。然後這些字加到類型的ArrayList:現在刪除以前的字符串條目

ArrayList<String> dictionaryList = new ArrayList<String>(); 

,程序成爲環圈運行(直至「Q」被鍵入),並且提示用戶以搜索字。如果可以找到該單詞,程序會返回一個簡單的「找到的單詞」消息。

否則;採取搜索詞並生成該詞的變體。這些變化將被添加到列表:

ArrayList<String> allSimilarWords = new ArrayList<String>(); 

例如,單詞「coffei」將產生在英國的一系列「類似的話」,他們是「咖啡」之一(一個字語言)。

現在,看到我同時擁有的所有字典單詞列表,以及相似字的列表,程序檢查是否在allSimilarWords字包含在dictionaryList

我檢查了我的generateSimilarWords -method,它按預期工作。

但是,在詢問用戶輸入時時有問題。第一次(鍵入「coffei」(其中咖啡在字典清單)),該程序產生的輸出如下:

Enter search term: 
coffei 
Suggestion for similar words: 
-coffee 

由於這是一個死循環,程序要求我輸入一個字。現在,如果我輸入「banaan」(其中香蕉在字典中),該程序產生的輸出如下:

Enter search term: 
banaan 
Suggestion for similar words: 
-coffee 
-banana 

因此,「記住」我尋找coffei,並提供了「咖啡「作爲建議的詞,除了」香蕉「這個詞。我一直在試圖弄清楚爲什麼會發生這種情況,但找不到我的錯誤。任何幫助將不勝感激。以下是代碼:

CODE

//GETTING SIMILAR WORD ARRAYLIST 
public ArrayList<ArrayList<String>> getSimilarWords(String searchWord) { 
    this.searchWord = searchWord; 
    char[] wordAsCharacterArray = searchWord.toCharArray(); //Convert search String to a character array 

    //Call helper methods to add the suggested similar words to the similarWordArrayList 
    similarWordArrayList.add(charSwap(wordAsCharacterArray)); //Add swapped character suggestions 
    similarWordArrayList.add(charRemove(wordAsCharacterArray)); //Add removed character suggestions 
    similarWordArrayList.add(charAdd(wordAsCharacterArray)); //Add removed character suggestions 
    similarWordArrayList.add(charReplace(wordAsCharacterArray)); //Add removed character suggestions 

    return similarWordArrayList; 
} 

similarWordArrayList是後來的 「轉換」,以僅包含字符串元素的ArrayList,而不是作爲ArrayList類型<的ArrayList <字符串的列表> >。查找字符串

//Method to generate and suggest similar words 
private void suggestWords(ArrayList<ArrayList<String>> similarWords) { 
    allSimilarWords = convertSingleList(similarWords); 
    String currWord = ""; 

    outer: for(int i = 0; i < allSimilarWords.size(); i++) { //Iterate through the list of similar words 
     currWord = allSimilarWords.get(i); //Set current similar word to a String variable 
     for(int j = 0; j < i; j++) { 
      if(currWord.equalsIgnoreCase(allSimilarWords.get(j))) { 
       continue outer; 
      } 
     } 
     if(myDictionaryList.contains(currWord)) { 
      System.out.println("-" + currWord); 
     } 

    } 
} 

方法:

public void findString(String word) { 
    searchTerm = word; 
    if(myDictionaryList.contains(word)) { //If found 
     System.out.println("Found word!"); //Notify 
    } 
    else { 
     //Find all similar words 
     System.out.println("Suggestions for similar words: "); 
     similarWords = handler.getSimilarWords(searchTerm); 
     suggestWords(similarWords); 
    } 
} 

我如何能解決這個問題,使程序只打印出基於過去的搜索項建議的單詞(而不是記住前面建議的任何幫助字),是高度讚賞。

+0

你能告訴我哪個變量給出最終輸出嗎? – 2014-10-01 09:34:44

回答

1

我認爲,你必須做的第一件事是在向它添加單詞之前清除你的數組列表。

//GETTING SIMILAR WORD ARRAYLIST 
public ArrayList<ArrayList<String>> getSimilarWords(String searchWord) { 
    this.searchWord = searchWord; 
    char[] wordAsCharacterArray = searchWord.toCharArray(); //Convert search String to a character array 

    //Clear the list before adding words 
    similarWordArrayList.clear(); 

    //Call helper methods to add the suggested similar words to the similarWordArrayList 
    similarWordArrayList.add(charSwap(wordAsCharacterArray)); //Add swapped character suggestions 
    similarWordArrayList.add(charRemove(wordAsCharacterArray)); //Add removed character suggestions 
    similarWordArrayList.add(charAdd(wordAsCharacterArray)); //Add removed character suggestions 
    similarWordArrayList.add(charReplace(wordAsCharacterArray)); //Add removed character suggestions 

    return similarWordArrayList; 
} 
+0

謝謝您的建議。但是,在輸入第二個搜索詞時,它仍然給我以前建議的詞。 :S – northerner 2014-10-01 09:32:28

+0

但是@DirkNm建議的方式是這樣做的。可能是這個地方會有所不同。但是在形成這些單詞之前,你必須清除列表。 – 2014-10-01 09:34:15

+0

非常感謝你們!它幫助我意識到我必須清除ArrayList ** allSimilarWords **(在suggestWords()方法中)。 – northerner 2014-10-01 09:42:05