文字列の1次元配列に対してtoString
メソッドを実行する方法を知っていますが、2次元配列を出力するにはどうすればよいですか? 1Dでは、次のようにします。
public String toString() {
StringBuffer result = new StringBuffer();
res = this.magnitude;
String separator = "";
if (res.length > 0) {
result.append(res[0]);
for (int i=1; i<res.length; i++) {
result.append(separator);
result.append(res[i]);
}
}
return result.toString();
2D配列を印刷するにはどうすればよいですか?
要素を2回繰り返すだけです。
_StringBuffer results = new StringBuffer();
String separator = ","
float[][] values = new float[50][50];
// init values
for (int i = 0; i < values.length; ++i)
{
result.append('[');
for (int j = 0; j < values[i].length; ++j)
if (j > 0)
result.append(values[i][j]);
else
result.append(values[i][j]).append(separator);
result.append(']');
}
_
重要:StringBuffer
は、操作をチェーンできるので便利です。例:buffer.append(..).append(..).append(..)
は、自己への参照を返すためです。可能な場合は同期糖を使用してください。
IMPORTANT2:この場合、StringBuffer
に多くのものを追加する予定なので、追加中に配列を何度も割り当てたり再配置したりしないように容量を見積もるとよいので、計算して行うことができます。多次元配列のサイズに、追加する予定の要素の平均文字長を掛けたもの。
Arrays クラスは、いくつかの便利なメソッドを定義します
String[][] aastr = {{"hello", "world"},{"Goodbye", "planet"}};
System.out.println(Arrays.deepToString(aastr));
与える
[[hello, world], [Goodbye, planet]]
public static <T> String to2DString(T[][] x) {
final String vSep = "\n";
final String hSep = ", ";
final StringBuilder sb = new StringBuilder();
if(x != null)
for(int i = 0; i < x.length; i++) {
final T[] a = x[i];
if(i > 0) {
sb.append(vSep);
}
if(a != null)
for(int j = 0; j < a.length; j++) {
final T b = a[j];
if(j > 0) {
sb.append(hSep);
}
sb.append(b);
}
}
return sb.toString();
}
public static void main(String[] args) {
String array [] [] = {
{"*","*", "*", "*", "*", "*"},
{"*"},
{"*"},
{"*"},
{"*","*", "*", "*", "*", "*"},
{"*"},
{"*"},
{"*"},
{"*"},
{"*"}};
for (int row=0; row<array.length;row++) {
for (int column = 0; column < array[row].length; column++) {
System.out.print(array[row][column]);
}
System.out.println();
}
}
2つのfor
ループ:
for (int i=1; i<res.length; i++) {
for (int j=1; j<res[i].length; j++) {
result.append(separator);
result.append(res[i][j]);
}
}