1
if (isSubstring(str1, str2))
System.out.println(str1 + " is a substring of " + str2 + ".")

isSubstring のメソッドは次のとおりです。

public static boolean isSubstring(String str, String target)
    {   
        if (str == target)
            return true;

        return (isSubstring(str, target.substring(0,5)));            
    }

それが私が今コードに持っているものであり、これをどのように解決するのか理解できません。私のインストラクターは再帰を使用するように要求しているので、リターンはそれ自体を呼び出さなければなりません。通常、この問題はたった 1 行のコードで簡単に解決できます。

public static boolean isSubstring(String str, String target)
{
return str.contains(target)
}

しかし、これを解決するために無意味に再帰を使用する必要があり、この方法がどれほど些細なことであり、インストラクターがこれを行うように強制していることがどれほど複雑であるかを知ることは非常にイライラします. 「return str.contains(target)」では、これを解決するための適切な基盤が得られないため、どこから始めればよいかわかりません。

4

5 に答える 5

0

1 つの修正:文字列/オブジェクトを比較するequals()代わりに使用します。参照の等価性を比較します。内容が等しいかどうかを比較します。====equals()

if (str == target)

する必要があります

if (str.equals(target))
于 2012-11-01T16:10:08.343 に答える
0

メソッドで文字列を比較equals()する: change

if (str == target)

if (str.equals(target))
于 2012-11-01T16:10:28.553 に答える
0

関数が以下に適用されることがわかっています。

  • 基本ケース) 空の文字列。false を返す必要があります。
  • 基本ケース) 探している で始まる文字列は、true を返す必要があります。
  • rec case) それ以外の場合は、最初の文字を削除し、残りの文字列を確認します。

Java のコードは次のとおりです。

public static boolean isSubstring(final String str1, final String str2) {
    if ((str1 == null) || (str2 == null) || str1.isEmpty()) {
        return false;
    } else if (str1.startsWith(str2)) {
        return true;
    } else {
        return isSubstring(str1.substring(1), str2);
    }
}

テスト:

public static void main(final String[] args) {
    System.out.println(isSubstring("hello this is a simple test", "is a"));
}

出力:

true
于 2013-12-11T12:06:41.920 に答える
0

わかりました、アサドのアドバイスは役に立ちました。isSubstring の作業方法は次のとおりです。

public static boolean isSubstring(String str, String target)
{   
    if (target.length() == 0)
        return false;

    if (str.equals(target))
        return true;

    else     
    return (isSubstring(str, target.substring(0,target.length()-1)));            
}

2 番目の「if」が代わりに「else if」であるべきかどうかはわかりません。

于 2012-11-01T16:28:04.520 に答える