2016-04-19 4 views
1

したがって、2つのintのvw、文字列q、およびリストlistがあります。 listには、qの複製を持つ文字列が追加されます(vw)。リスト内に特定の文字の数が多い文字列を追加する

たとえば、vは2、wは4、qは「a」です。 リストは、プログラムが完了するまで[aa、aaa、aaaa]にする必要があります。

私はこれに類似したさまざまなプログラムを行っていますが、これは簡単だと思っていましたが、それはまだ何らかの理由で私が何か不足していると思います。私はこれを行うことでこれを解決しようとしました

for (int j = v; j <= w; j++) { 
    String s = ""; 
    for (int k = 0; k < j ; k++) { 
     s+=q; 
    } 
    list.add(s); 
} 

しかし、それはちょうど一定の数のQを与えます。変化しない。

+2

あなたのコードは私にとって正しいです。あなたのコードが正しい出力を与えていない場合は、誤った出力を実行して再現できる[MCVE](http://stackoverflow.com/help/mcve)を教えてください。 – ajb

+1

彼はqq、qqq、qqqqを得るつもりです – Tatarize

+1

あなたが言うとき:* qは "a"です。リストは[qq、qqq、qqqq]でなければなりません* - リストは '[" aa "、" aaa "、" aaaa "]'でなければなりませんか?私はそれがあなたが意味するものだと確信しています。 –

答えて

3

ファーストを使用して、互いの方法もありますStringUtils.repeat

for (int j = v; j <= w; j++) { 
    list.add(StringUtils.repeat("q", j)); 
} 

を使用して行うことができ、StringBuilderを好みますString連結(そのは、のキャッシュを1つのためにinternに汚染します)。そして最初にStringを作成するには、v回ループする必要があります。次にqを追加します。何か

int v = 2; 
int w = 4; 
String q = "a"; 
List<String> list = new ArrayList<>(); 
StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < v; i++) { 
    sb.append(q); 
} 
for (int j = v; j <= w; j++) { 
    list.add(sb.toString()); 
    sb.append(q); 
} 
System.out.println(list); 

のような出力があなたが何かを台無しにしている(要求された通り)

[aa, aaa, aaaa] 
+0

ちょうど好奇心から:私はなぜ文字列の連結がインターンのキャッシュを汚染していたのだろうかと思います。暗黙のうちに暗黙のうちに中途半端に受け入れられていたのは、私の理解だけでした。 – samjaf

+0

おそらく、私は、インターンのキャッシュを汚染しているかもしれないと言っていたはずです。それにもかかわらず、 's + = q;'を内部ループの 'String'連結に使用すると、無駄な一時参照をたくさん作成します。 –

+0

ありがとうございます。 – samjaf

-1

それはネイティブAndroidのコードを使用してそれを行うのと、1行ではなく、二つのループ

for (int j = v; j <= w; j++) { 
    list.add(String.format(String.format("%%%ds", j), " ").replace(" ","q")); 
} 
+0

否定投票の理由は何ですか? –

+1

私はそれが問題に対処していないと思うし、私たちはすでに動作するはずのコードを凝縮するライブラリを追加するようお願いします。 – Tatarize

+1

おそらく問題を解決していないからです。 OPは彼のコードが機能していないと言います。あなたがしたことは、彼のコードがすでにしていることをやるためのより良い方法を与えられます。しかし、彼のコードがうまくいけば、これで修正されることはありません。だからあなたは間違った質問にかなり答えました。私はdownvoterではないが、私はそれが理由を推測している。 – ajb

3

です。これは正常に動作します。

私の予測は「この関数が機能するため、あなたはlist.get(0)を繰り返し使用してコードを出力しています。リスト全体を反復処理せずに最初のエントリlist.size( )回。

var list = [] 
 

 
var v = 2; 
 
var w = 4; 
 
var q = "a" 
 

 

 
for (var j = v; j <= w; j++) { 
 
    var s = ""; 
 
    for (var k = 0; k < j ; k++) { 
 
     s = s + q; 
 
    } 
 
    list.push(s); 
 
} 
 
document.write(list)

+2

なぜjavascriptですか? –

+1

はintをvarsに変換し、そこに同じ関数を与えました。 JSのフィドルだけ、あなたはjavascript以外の迅速な実行可能な断片を行うことができるかどうかは分かりません。しかし、あなたは機能が同じであることがわかります。そして出力は期待されるものです。 – Tatarize

+0

私はjavascriptをうまく読むことができます - しかし、私は、aa、aaa、aaaaを取得し続けます –

0

解決 - 問題は、V &ワットについての不適切な値を使用していました。答えてくださった皆様、ありがとうございました。私は将来、これらの新しい技術を念頭に置いていきたいと思います。