2017-05-04 57 views
0

尋找一個遞歸的手,我知道這是一個簡單的問題,但在某處退出但不知道如何/在哪裏!Java - 遞歸地統計列表中的單詞的出現

這裏是我的遞歸方法:

public static int getNumAppearances(myList<String> l, String word) 
{ 
    int index = 0; 
    int count = 0; 
    String search = word; 

    if(index > l.my_get_length()-1) 
    { 
     return 0; 
    } 
    else if(l.my_get_element(index).equals(search)) 
    { 
     count++; 
     index++; 
    } 

    return count + getNumAppearances(l, word); 
} 

乾杯!

編輯,myList中類:

public interface myList<T> { 

    //------------------------------------------------------------------- 
    // Create an empty MyList: create_empty 
    //------------------------------------------------------------------- 
    //public myList create_empty(); --> Java does not support constructors in interfaces 

    //------------------------------------------------------------------- 
    // Basic Operation --> Get number of elements in MyList: my_get_length 
    //------------------------------------------------------------------- 
    public int my_get_length(); 

    //------------------------------------------------------------------- 
    // Basic Operation --> Get element at of MyList at a concrete position: my_get_element 
    //------------------------------------------------------------------- 
    public T my_get_element(int index) throws myException; 

    //------------------------------------------------------------------- 
    // Basic Operation --> Add element to MyList at a concrete position: my_add_element 
    //------------------------------------------------------------------- 
    public void my_add_element(int index, T element) throws myException; 

    //------------------------------------------------------------------- 
    // Basic Operation --> Remove element of MyList at a concrete position: my_remove_element 
    //------------------------------------------------------------------- 
    public void my_remove_element(int index) throws myException; 

} 

我意識到你需要的理想傳遞給方法的指數但不幸的是,這不是他有它設置方式!

+2

請註明您所遇到的問題。 –

+0

遞歸執行此操作沒有理由。只需循環查看您的列表並查看單詞。 – AndyB

+0

@AndyB很可能這是一個家庭作業任務,旨在教授遞歸 - 因此不允許使用更明智的方法 – Catchwa

回答

0

您可以通過修改列表,這樣在你的函數計算:

public class RecursiveListWordCount { 

    public static void main(String[] args) { 
     System.out.println(count(Arrays.asList("a", "b", "a", "b", "c"), "d")); 
    } 

    public static final int count(List<String> list, String word) { 
     if(list.isEmpty()) { 
      return 0; 
     } 

     if(list.get(0).equals(word)) { 
      return 1 + count(list.subList(1, list.size()), word); 
     } else { 
      return 0 + count(list.subList(1, list.size()), word); 
     } 

    } 
} 

在每次調用,我檢查,如果該列表是空的,如果true我將返回0(爲空列表肯定沒有它可能是相同的單詞)。

接下來的調用將添加一個子列表,刪除我剛剛檢查的單詞。

希望幫助,

阿圖爾

+0

不幸的是我無法修改列表,它必須保持原樣! –

+0

上述代碼不會修改您的原始列表。它會創建一份您的清單的副本並將其傳遞。一旦遞歸函數返回,您的列表將仍然具有相同順序的相同項目並且是未修改的。除了將索引作爲字段而不是局部變量進行計數,但這將是一個可怕的解決方案:)) – pandaadb

+0

雖然我只有4種方法可用,但my_get_length(),my_remove_element(),my_get_element() )和my_add_element。,不能使用。subList等 –

0

看來你利用index變量不正確,因爲你總是檢查每一個方法調用本身相同時間index,我會建議使用index作爲參數傳遞給方法。而不是保留count變量,我們可以在每次找到匹配時將結果添加到1

public static int getNumAppearances(List<String> list, String word, int index) 
{  if(list == null || list.size() == 0 || index < 0) return -1; // you can throw an exception instead if you deem it necessary. 
     if(index > list.size() - 1) return 0; 
     else if(list.get(index).equals(word)) return 1 + getNumAppearances(list, word, index + 1); 
     return getNumAppearances(list, word, index + 1); 
} 

- 調用方法時,一定要通過0作爲參數傳遞給index參數,因爲這種方法檢查從開始到結束的名單。

+0

乾杯,不幸的是我不能改變他希望我們使用的方法,所以我不能給它添加一個Index參數。 –