3

文字列でいっぱいのファイルを取得して読み取り、いくつかを出力しようとしています。

  • 文字列
  • 文字列の後方 AND 大文字
  • 文字列の長さ

他にもいくつかありますが、私はまだその段階まで進んでおらず、誰かにコード全体を書いてもらいたくありません。しばらくいじった後、ほぼ完成しました(いくつかの領域を除いて)。

私をつまずかせているのは、後ろ向きの言葉です。prinf を使用して出力を列にきちんと配置する必要がありますが、一度に各文字を読み取ると、これを行うことができません。ということで、aを設定しString backwardsWord = "";て各キャラ追加してみました。

これは私をつまずかせている作品です:

for(int i = upperCaseWord.length() - 1; i >= 0; i--)
{
    backwardsWord += (upperCaseWord.charAt(i) + "");
}   

    

私の問題は、印刷すると最初の単語が正しく機能することです。ただし、その後の各単語は前の単語に追加されます。

例: cat、dog、rat を逆に印刷すると、次のように表示されます。

TAC

タックゴッド

タクゴター

明らかに読んでほしい

TAC

神様

タール

どんな助けでも大歓迎です。

4

3 に答える 3

4

It looks like your variable backwardsWord is always appending a character without being reset between words. The simplest fix is to clear the backwardsWord just before your loop by setting it to empty string.

backwardsWord = ""; //Clear any existing characters from backwardsWord

for(int i = upperCaseWord.length() - 1; i >= 0; i--)
{
    backwardsWord += (upperCaseWord.charAt(i) + "");
}


If you are building up a String one character at a time you will be using a lot of memory because Java Strings are immutable.

To do this more efficiently use a StringBuilder instead. This is made for building up characters like what you are doing. Once you have finished you can use the toString method to get the String out.

StringBuilder builder = new StringBuilder(); //Creates the String builder for storing the characters
for(int i = upperCaseWord.length() - 1; i >= 0; i--)
{
    builder.append(upperCaseWord.charAt(i)); //Append the characters one at a time 
}
backwardsWord = builder.toString(); //Store the finished string in your existing variable

This has the added benefit of resetting the backwardsWord each time.


Finally, since your goal is to get the String in reverse we can actually do it without a loop at all as shown in this answer

backwardsWord = new StringBuilder(upperCaseWord).reverse().toString()

This creates a new StringBuilder with the characters from upperCaseWord, reverses the characters then stores the final string in backwardsWord

于 2013-09-25T22:50:10.987 に答える
3

文字列backwardsWordをどこで宣言していますか?

単語間でクリアしないと、その文字列に割り当てられたメモリ領域には、以前に追加された文字が含まれたままになります。

backwardsWord = ""; を投げていることを確認してください。単語の間に値をリセットすると、問題が解決するはずです。

あなたのコードをもっと見ないと、どこに置くべきか正確にはわかりません。

于 2013-09-25T22:55:00.917 に答える
1

これでうまくいくはずです->

class ReverseWordsInString{
public static String reverse(String s1){
        int l = s1.length();
        if (l>1)
                return(s1.substring(l-1) + reverse(s1.substring(0,l-1)));
        else
                return(s1.substring(0));
  }
public static void main(String[] args){
        String st = "Cat Dog Rat";
        String r = "";
        for (String word : st.split(" "))
                r += " "+ reverse(word.toUpperCase());
        System.out.println("Reversed words in the given string: "+r.trim());
  }
}
于 2013-09-25T22:51:52.480 に答える