2017-05-18 97 views
1

我的作業是製作遞歸方法來計算給定字符串中給定字母的外觀。這是我到目前爲止的代碼:使用Java中的遞歸方法計算字符串中的特定字符

import java.util.Scanner; 
public class Exercise18_10 { 
    public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in);  
    System.out.print("Enter a string: "); 
    String str = sc.next(); 
    System.out.print("Enter a character: "); 
    String letter = sc.next(); 
    char a = letter.charAt(0); 
    System.out.println("The count of " + a + " is: " + count(str, a)); 

    } 
    public static int count(String str, char a) { 
     int count = str.indexOf(a); 
     return count; 
    } 
} 

count,我用indexOf找到所需字母第一次出現,但我不知道以後該怎麼辦。

+0

你知道如果你只是一支紙和筆,你會怎麼做? –

+1

你知道'indexOf(...)'是做什麼的嗎? – Turing85

+1

是的,它發現第一個出現的指定字符 –

回答

1

您的count變量是位置第一次出現在字符串中。相反,你需要像

public static int count(String str, char a) { 
    int exist = str.indexOf(a); 
    if (<a doesn't exist in str*>) 
     return 0; 
    else { /* recur on the rest of the string; add 1 */ 
     rest = str.substr(exist+1, <end of string>) 
     return count(rest, a) + 1 
    } 
} 

我留下了很多這爲你的代碼,但這些是兩個基本步驟:

  • 基本情況:的字符不是在那裏,所以返回0
  • 遞歸:計數一次瞄準,添加任何在字符串的其餘部分。
+1

謝謝你現在有這麼多的意義! –

0

如您所述,'count'函數當前返回輸入字母首次出現的索引。遞歸計算出現次數的想法意味着當您前進時,需要將字符串分解爲更小和更小的部分。

首先,您查看整個字符串,然後只查看以下一個匹配項開始的當前字符串的子字符串,依此類推。爲了在這裏實現遞歸,你可能需要創建一個方法,它可以自動重複調用自己(如Inception!),並有一個基本條件,一旦完成就會發生(即達到一個字符串的末尾或找到不再出現的字符在你已經離開的字符串的任何部分 - > indexOf(...)== -1)

+1

謝謝你的迴應,這是非常有益的! –