Я знаю, как сделать toString
метод для одномерных массивов строк, но как я печатаю двумерную матрицу? С 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 массив?
Вы просто повторяете элементы дважды:
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 (..)
, поскольку он возвращает ссылку на себя! Используйте синтаксический сахар, если он доступен.
ВАЖНО2: , поскольку в этом случае вы планируете добавить много вещей в StringBuffer
, хорошо оценить емкость, чтобы избежать выделения и перемещения массива много раз в течение добавляет, вы можете вычислить размер многомерного массива, умноженный на среднюю длину символа элемента, который вы планируете добавить.
Два для
циклов:
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]);
}
}
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();
}
Класс Arrays определяет пару полезных методов
String[][] aastr = {{"hello", "world"},{"Goodbye", "planet"}};
System.out.println(Arrays.deepToString(aastr));
Gives
[[hello, world], [Goodbye, planet]]