1

この演習の正しい解決策が見つかりません。タスクは次のとおりです。


(配列中の指定文字の出現回数) 配列中の指定文字の出現回数を求める再帰的メソッドを書きなさい。次の 2 つのメソッドを定義する必要があります。2 つ目は、再帰的なヘルパー メソッドです。

public static int count(char[] chars, char ch)

public static int count(char[] chars, char ch, int high)

ユーザーに 1 行に文字のリストと文字を入力するように促し、リスト内の文字の出現回数を表示するテスト プログラムを作成します。


1) 別のパラメーター (int インデックス) を追加した場合にのみ解決できますが、別のパラメーターを追加したり for ループを使用したりせずに解決するにはどうすればよいですか?

2)ヘルパーメソッドがあるのはなぜですか? 再帰におけるヘルパー メソッドの目的がわかりません。

これが私の解決策です:

package occurencesinarray;

import java.util.Scanner;

public class Start {
public static void main(String[] args){
    System.out.println("Enter few characters: ");
    Scanner scan = new Scanner(System.in);
    String s = scan.nextLine();
    char[] chars = new char[s.length()];
    for(int i = 0; i < s.length(); i++){
        chars[i] = s.charAt(i);
    }
    System.out.println("Enter desired character: ");
    char ch = scan.nextLine().charAt(0);

    System.out.println(count(chars, ch));
}

public static int count(char[] chars, char ch){
    return count(chars, ch, 0, 0);
}

public static int count(char[] chars, char ch, int high, int index){
    if(index == chars.length){
        return high;
    }
    if(chars[index] == ch){
        return count(chars, ch, high + 1, index + 1);
    } else{
        return count(chars, ch, high, index + 1);
    }
}
}
4

4 に答える 4

1

これはどう:

高はインデックスを表します

public static int count(char[] chars, char ch, int high){
    if(high == chars.length){
        return 0;
    }
    if(chars[index] == ch){
        return count(chars, ch, high + 1) + 1;
    } else{
        return count(chars, ch, high + 1);
    }
}

ヘルパー メソッドは、呼び出し元が "high" パラメーターについて知る必要がないようにするためのものです。デフォルトのパラメーターを持つことができる C などの別の言語では、必要ありません。

于 2014-03-25T16:01:59.207 に答える