私は既に3つ(ヘルパーメソッド)を追加するときに、2つのパラメータを使用して、既に動作している再帰関数にヘルパーメソッドを追加することに問題があります。溶液。プログラムは文字列のキーボード入力用のスキャナと文字の別の入力用のスキャナを使用し、文字の出現数を出力します。エラーは、2番目のif文と両方のreturn文で発生します。第二のキーボード入力後、私はエラーを取得しています:ここで文字列を読み込むための再帰関数のJavaヘルパーメソッド
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -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
}
}
次を考えてください:あなたは 'str.length()を呼び出す場合は、空の文字列は何につながる - 1 '?そして再帰を止める時を考えると、明らかに空の文字列でも 'count'を呼び出します。 – AKSW
文字列はスキャナから来て、入力の長さとそれからの1を取りますか?最後のプログラムで問題はありませんでした。それは、3番目のパラメータを使用してヘルパーメソッドを追加するときです。 – Devin
小さな文字列 'aba'のペン+ペーパーはあなたに問題を示すはずです - 時にはこの古い学校のデバッグが十分速く動作することがあります。それ以外の場合は、IDEにデバッガがあります。プログラムの実行を許可します。 – AKSW