2017-05-18 165 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

谢谢你的回应,这是非常有益的! –