0
    public static int getIndexOf(char ch, String str) {
    if (str == null || str.equals("")) {
        return 0;
     //base case
    }else{
        char first = str.charAt(0);
        if (ch != first) {
            return -1;
     //returns -1 when the character cannot be found within the string
        }else{
            int rest = str.length() - 1;
            if (str.charAt(rest) == ch) {
                return rest; 
            }
            return lastIndexOf(ch, str.substring(0, rest));
            //recursive case
        }
    }
}

これは、入力文字列の入力文字のインデックスを返す私のメソッドです。ただし、インタラクション プレーンで実行すると、間違った番号が返されます。例えば、「a」と「peach」を入力すると、本来は 2 が返されるはずが、-1 が返されます。このメソッドは、文字列内に文字が見つからない場合にのみ -1 を返す必要があります。対処方法を教えてもらえますか?ありがとうございました!

4

3 に答える 3

1

では、ロジックをステップ実行して、何が起こるか見てみませんか。

getIndexOf('a', "peach")

メソッドが入り、文字列が null または空ではないため、次のコード行にフォールスルーします。

char first = str.charAt(0); // this is 'p'

if (ch != first) {  // is 'p' equal to 'a'? no. so return -1
        return -1;

そして、残りのロジックは決して実行されません。この問題を解決する方法がわかりますか?

于 2013-04-05T00:40:03.230 に答える
0

コードの次の部分は、一致する場合は文字列の最初の文字をチェックし、そうでない場合は -1 を返すことを意味します。

char first = str.charAt(0);
        if (ch != first) {
            return -1;

これは、0 番目のインデックスの文字が一致しない場合、-1 を送信することを意味します。「peach」の「p」は「a」と一致しないため、-1 が返されます。

わかりましたか?

于 2013-04-05T00:42:19.777 に答える