我有一个问题,在我已经工作的递归函数中添加一个只使用2个参数的helper方法,当添加第3个(helper方法)时,我的代码中断并寻找解决方案。这个程序使用一个扫描器,键盘输入一个字符串,另一个输入一个字符,然后输出字母出现的次数。错误发生在第二个if语句和两个return语句上。在第二次键盘输入后,我得到一个错误:
线程“main”java.lang.stringindexoutofboundsexception中出现异常:字符串索引超出范围:-1
import java.util.Scanner;
public class recursiveString {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a string: ");
String input = sc.nextLine();
System.out.println("Enter a character to find number of occurences: ");
char character = sc.next().charAt(0);
System.out.println(character + " occurred " + count(input, character, input.length() - 1) + " times.");
}
public static int count(String str, char a, int high) {
if (str.length() == high) // set equal to high to stop the recursion from infinitely looping
return high;
if (str.charAt(str.length() - 1) != a) // if the character in the string is not equal to "a" subtract from count(substring)
return count(str.substring(0, str.length() - 1), a, high - 1);
else
return 1 + count(str.substring(0, str.length() - 1), a, high - 1);
// else add +1 to count for each instance of "a" in the string
}
}
2条答案
按热度按时间q8l4jmvw1#
您缺少递归方法的设计:首先,您应该关注一个问题,并为基本情况或多个情况定义它。
我对这个问题的看法是,基本情况是空字符串(但在此之前,请确保它不是空字符串)
null
)或者如果high
设置为0。我对
high
您可以使用它来设置要检查字符串中出现的字符的数量a
; 随着绳子变大,检查起来会更直接,吉文high
搜索字符出现的意义a
进入str.substring(0,high)
,但我试着保持它与您的代码相似。电话
main
将是:tf7tbtn22#
下面是一个可能的解决方案,可以帮助您避免索引越界: