2017-12-20 29 views
0

これは私のtoStringメソッドです。文字列配列をtoStringメソッドの文字列に変換する方法

public String toString() { 
    Life game = new Life(grid); 
    String word; 
     for (int row = 0; row < grid.length; row++) { 
      for (int col = 0; col < grid[0].length; col++) { 
       System.out.print("[" + grid[row][col] + "]"); 
      } 
      System.out.println(); 
     } 
    word = ""; 
    return word; 
} 

私は("[" + grid[row][col] + "]")を取得しようとしています。私のString単語に。これは、ライフグリッドのゲームを作成することです、私は文字列表現に配列を配置する方法を把握することはできません。

すべての細胞が死んでいた場合の外観のサンプル。 `

[0][0][0][0][0][0][0][0][0][0] 
[0][0][0][0][0][0][0][0][0][0] 
[0][0][0][0][0][0][0][0][0][0] 
[0][0][0][0][0][0][0][0][0][0] 
[0][0][0][0][0][0][0][0][0][0] 
[0][0][0][0][0][0][0][0][0][0] 
[0][0][0][0][0][0][0][0][0][0] 
[0][0][0][0][0][0][0][0][0][0] 
[0][0][0][0][0][0][0][0][0][0] 
[0][0][0][0][0][0][0][0][0][0] 

私はword = word +" ["+ grid [row] [col] +"] "を試してみます。私は...

[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]... 

すべてが一直線上にあります。

+0

サンプル入力と希望出力 –

+1

https://docs.oracle.com/javase/9​​/docs/api/java/lang/StringBuilder.htmlを参照してください。 – VGR

+1

グリッドアレイの宣言方法を追加できますか? –

答えて

3

あなたがここに二つの問題を扱っている:

  • Stringに出力を収集する - これはStringBuilderクラスで行うことができ、かつ
  • は、出力文字列に改行を追加する - これはthis Q&A

最終結果は次のようになります。

StringBuilder res = new StringBuilder(); 
String newline = System.getProperty("line.separator"); 
for (int row = 0 ; row < grid.length ; row++) { 
    for (int col = 0 ; col < grid[row].length ; col++) { 
     res.append('['); 
     res.append(grid[row][col]); 
     res.append(']'); 
    } 
    // Do not append the trailing newline 
    if (row != grid.length-1) { 
     res.append(newline); 
    } 
} 
return res.toString(); 
+0

ありがとう私はすぐにそれをチェックします – HeavenlyPanda

+0

@RAZ_Muh_Taz彼の配列が長方形であるためOPのケースでは問題には見えませんが、インデックスとして 'row'を使用すると、誰かがこのコードをコピーして貼り付けて使用する場合に安全ですギザギザの配列の場合ありがとう! – dasblinkenlight

0

は、Java 8のStringJoinerの使用を検討してください:

public String toString() { 
    StringJoiner iJoiner = new StringJoiner(System.getProperty("line.separator")); 

    for (int i = 0 ; i < grid.length ; i++) { 
     StringJoiner jJoiner = new StringJoiner("][", "[", "]"); 
     for (int j = 0 ; j < grid[i].length ; j++) { 
      jJoiner.add("" + grid[i][j]); 
     } 
     iJoiner.add(jJoiner.toString()); 
    } 
    return iJoiner.toString(); 
} 

StringJoinerは、要素(ただし、前または後)の間の区切り文字を置き、必要に応じて接頭辞または接尾辞を追加します。

sourceは、これを実現するエレガントな方法です。

またCollectors.joining()を使用してストリーム指向の方法でこれを行うことができます - StringJoiner周りの実装シンプルCollectorである:

return Arrays.stream(grid) 
    .map(row -> 
     Arrays.stream(row) 
      .mapToObj(x -> ""+x) 
      .collect(Collectors.joining("][", "[", "]")) 
    .collect(Collectors.joining(lineSeparator)); 
  • はへmap()を使用して入力int[][]
  • からStream<int[]>を作りますそれぞれ処理するint[]
    • の各セルのための項目を有するStream<String>IntStream
    • mapToObjIntStreamにE int[]したがってStream<String>
  • 収集を返すフォーマット行文字列"[1][2][3]"
  • map()Stream<String>を収集しますStream<String>を改行で区切られた1つの文字列に変換する
関連する問題