1

文字列と int をパラメーターとして使用するメソッドを必要とする割り当てを行っています。メソッドは、長さが指定された長さになるまで、パラメーター文字列をスペースで埋める必要があります。たとえば、 padString("hello", 8 should return "hello___"(_ は 3 つのスペースを表します)) です。int が文字列の長さよりも大きい場合は、単純に文字列を返します。プログラムの「パディング」部分を下ろすのに苦労しています。

この割り当ては本の初期段階にあるため、if/else ステートメントをまだ使用することを想定していないため、forloops、パラメーター、および一般的な文字列メソッドなどの初心者向けのもので実行できると想定しています。

これが、私が現在持っている明らかに欠陥のあるコードです。

public class Exercise11 {

public static final String word = "congratulations";
public static final int length = 10;

public static void main(String[] args) {
    padString();

}

public static String padString(String word, int length) {
    if (word.length() >= length) {
        return word.substring(0,length + 1);
    } else {
        String thing = word;
        return word + addSpaces(word, length);
    }

}

public static void addSpaces(String word, int length) {
    for (int i = 1; i <= length-word.length(); i++) {
            return (" ");
        }
}

}

ところで、for ループで String 変数にスペースなどを追加する方法はありますか? 助けてくれてありがとう。

4

4 に答える 4

3

それは合理的なスタートです...

padStringは aStringとの 2 つのパラメータを想定してintいるので、これは...

public static void main(String[] args) {
    padString();
}

に変更できます...

public static void main(String[] args) {
    padString(word, length);
}

次の問題はあなたのaddSpaces方法です。ループ内のreturnステートメントは、ループが一度だけ実行され、単一の空白文字のみが返されることを意味します。

代わりに、各ループのスペースを一時的に連結する必要がありStringます。これは、たとえば...

public static String addSpaces(String word, int length) {
    StringBuilder sb = new StringBuilder(length);
    for (int i = 0; i < length - word.length(); i++) {
        sb.append(" ");
    }
    return sb.toString();
}

じゃあ、走ったら…

System.out.println("[" + padString("hello", length) + "]");

私は得る

[こんにちは ]

于 2013-09-16T07:03:12.480 に答える
1

当面の問題は、追加する必要があるスペースの数に関係なく、forループインがすぐに単一のスペースを返すことです。addSpacesより良いアプローチは、それが正しい長さになるまで内部変数addSpacesに戻り、スペースを追加してから、それを返すことです。StringString

また、Java では、別の場所から開始する特別な理由がない限り、ループをゼロから開始するのが通例です。あなたの場合、word.length()良い出発点かもしれませんが、1はそうではありません。

于 2013-09-16T07:00:19.677 に答える
0

みんなありがとう、それは今ようやく動作します。

コードの最終的なコピーは次のとおりです。

public class Exercise11 {

public static final String WORD = "congratulations";
public static final int LENGTH = 10;

public static void main(String[] args) {
    System.out.println(padString(WORD, LENGTH));
}

private static String padString(String word, int length) {
    if (word.length() >= length) {
        return word.substring(0,word.length());
    } else {
        return word + addSpaces(word, length);
    }

}

public static String addSpaces(String word, int length) {
    StringBuilder sb = new StringBuilder(length);
    for (int i = 0; i < length - word.length(); i++) {
        sb.append("_"); // these are more visible than empty spaces
    }
    return sb.toString();
}

}

ただし、まだいくつか質問があります。「Stringbuilder」を構築するポイントは何ですか?「append」メソッドとは何ですか?

今の本にはそういうものがないので、別の方法はありますか?

于 2013-09-16T07:23:22.047 に答える
0

スペースを追加しても何voidも返されません。また、内部ロジックも要件を満たしていません。

あなたのaddSpaces 方法は次のようにする必要があります

public static String addSpaces(String word, int length) {
     String spaces="";
    for (int i = 1; i <= length-word.length(); i++) {
           spaces +=  " ";
        }
     return  spaces;
} 

また、StringBuilderパフォーマンスを向上させるために、代わりに文字列を追加することをお勧めします。

StringBuilder を使用

 public static String addSpaces(String word, int length) {
         StringBuilder spaces=new StringBuilder();
        for (int i = 1; i <= length-word.length(); i++) {
               StringBuilder.append(" ");
            }
         return  spaces.toString();
    } 

その後、あなたreturn word + addSpaces(word, length); は完璧に動作します.私が他に何も見逃していないと仮定すると:)。

于 2013-09-16T07:01:11.147 に答える