2013-11-09 1 views
0

Итак, я пытаюсь написать метод toString, который печатает представление объекта Board с размером N × N размера переменной, так что, например, для N = 6 представление будет выглядеть так: это:Java-форматирование чего-то изменяемого размера с помощью Formatter

=== 
    2r -- 2r 2r -- 2b 
    -- -- 2r -- 3r -- 
    2r 3r 2r 3r -- 2b 
    3r 1r 3r 2r 2r 2b 
    2b 4r 3r 1r 3r 2b 
    2b 2b 3b 2r 3b 1b 
=== 

Каждая «площадь» на этой доске хранится на площади []. Мой вопрос заключается в том, что, поскольку размер этой платы является переменным, как мне написать строку формата, которая будет использоваться Formatter.format?

Это то, что я до сих пор, данные квадратики мой площади []:

/** Returns my dumped representation. */ 
@Override 
public String toString() { 
    Formatter out = new Formatter(); 
    String format = "Something here"; 
    out.format(format, squares); 
    return out.toString(); 
} 

Я думал о попытке использовать пару для петель и печать его строка за строкой, квадрат за квадратом, но я надеюсь, что это более чистый способ сделать это.

ответ

0

Я хотел бы попробовать использовать StringBuilder вместо этого Formatter:

final StringBuilder sb = new StringBuilder(); 
final int n = (int) Math.sqrt(squares.length); 
for (int row = 0; row < n; row++) { 
    for (int col = 0; col < n; col++) { 
     final int offset = row * n + col; 
     final Square square = squares[offset]; 
     sb.append(square.toString()) 

     final boolean lastCol = col == (n - 1); 
     sb.append(lastCol ? "\n" : " "); 
    } 
} 
return sb.toString();