Как распечатать двумерную матрицу строк как Строка

Я знаю, как сделать 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 массив?

17
задан 0xCursor 30 December 2018 в 22:22
поделиться

4 ответа

Вы просто повторяете элементы дважды:

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 , хорошо оценить емкость, чтобы избежать выделения и перемещения массива много раз в течение добавляет, вы можете вычислить размер многомерного массива, умноженный на среднюю длину символа элемента, который вы планируете добавить.

6
ответ дан 30 November 2019 в 10:09
поделиться

Два для циклов:

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]);
    }
}
0
ответ дан 30 November 2019 в 10:09
поделиться
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();
}
1
ответ дан 30 November 2019 в 10:09
поделиться

Класс Arrays определяет пару полезных методов

  • Arrays. toString - не работает для вложенных массивов
  • Массивов. deepToString - который делает именно то, что вы хотите

String[][] aastr = {{"hello", "world"},{"Goodbye", "planet"}};
System.out.println(Arrays.deepToString(aastr));

Gives

  [[hello, world], [Goodbye, planet]]
61
ответ дан 30 November 2019 в 10:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: