-2

I want to change the first method to a while and for loop. I have added the code below. Is this correct?

public String extractWordFour(String text){
        if(text.length()==0 || text.charAt(0) == ''){
            return "";
        } else {
            return text.charAt(0) + extractWordFour(text.substring(1));
        }
    }

public String extractWordFour(String text){
    int i=0;
    while (i<=text.length){
        return text.charAt(0) + extractWordFour(text.substring(i));
        i++;
    }
}

public String extractWordFour(String text){
    for(int i=0;i<=text.length();i++){
        return text.charAt(0) + text.substring(1);
    }
}
4

2 に答える 2

2

hwの割り当てだと思うので、この質問には答えませんが、コメントに収めることができないため、答えに入れますが、再帰的なソリューションをwhileまたはforループソリューション。

あなたが再帰を混ぜているので、そして一緒にいる間、あなたのwhileソリューションはまず間違っています。whileループ内で関数を呼び出さないでください。

public String extractWordFour(String text){
    int i=0;
    while (i<=text.length){
        return text.charAt(0) + extractWordFour(text.substring(i));
        i++;
    }
}

これは、ループが2回以上発生する前に返されるため、終了できません。

public String extractWordFour(String text){
    for(int i=0;i<=text.length();i++){
        return text.charAt(0) + text.substring(1);
    }
}

とにかくそれが役立つことを願っています。最初の関数が何をするのかを完全に理解し、それを書き留めてから、whileまたはforループを使用してまったく同じことを実行する方法を考えるのが最善の方法です。

于 2012-08-22T15:16:46.910 に答える
1

まず、有効な空の文字列とは異なり、有効な文字ではないため、持つString.charAt(0) == ''ことはできません。''""

2番目のメソッドは、再帰のために到達できないだけでなく、配列で呼び出すときにメソッドであるtext.length()代わりにあるべきであるため、機能しません。それに失敗すると、メソッドの署名は文字列を返すと主張していますが、return ステートメントはありません。text.lengthi++

3番目のメソッドにはreturnステートメントがありますが、最初の反復で返されるだけで最初の2文字しか返されないため、まだ機能しません(実際、コンパイラーはそれが勝ったため許可しません)これは気づきません)。

これらすべての問題は別として、のメソッド名がextractWordFour何をすべきかを正確に表したものである場合、ロジックが意味をなさないため、どれもそうしません。それについて考えることから始めることをお勧めします: String を調べることによって、1 つの単語がいつ終わるかをどのように判断できますか? また、4 番目の単語の前とその後のすべてを削除するには、プログラムが何を知る必要があるでしょうか?

于 2012-08-22T15:25:13.783 に答える