如何调整我的toString方法以使用多个输入

时间:2015-04-08 00:47:02

标签: java arrays string printf tostring

这很草率,但它适用于printint 6x6 2D阵列和每侧4个阵列:

  1 4 2 2 2 3 
 --------------
1 | 0 0 0 2 0 0  | 4
3 | 3 4 0 0 0 0  | 2
3 | 0 0 0 1 0 0  | 2
2 | 0 1 0 0 0 0  | 4
6 | 0 0 0 0 0 6  | 1
2 | 5 0 1 0 0 4  | 2
 --------------
  2 1 3 4 3 2  
null

任何人都可以帮我调整此方法以适用于任何大小的数组吗?不只是一个6x6?

@Override
public String toString() {
    System.out.print(' ');
    System.out.print(' ');
    for(int i = 0; i < NS.length; i++){
        System.out.print(NS[i]);
        System.out.print(' ');
    }
    System.out.println();
    for (int i = 0; i < board.length; i++) {
        if (i % board.length == 0) {
            System.out.println(' ' + "--------------");
        }
    }
    for (int j = 0; j < board.length; j++) {
        if (j % board.length == 0) {

            for (int r = 0; r < board.length; r++) {
                System.out.print(WE[r]);
                System.out.print(" | ");
                for (int c = 0; c < board[r].length; c++) {
                    System.out.print(board[r][c]);
                    System.out.print(' ');
                }
                System.out.print(" | ");
                System.out.print(EW[r]);
                System.out.println();
                }
            }
        }
    System.out.println(' ' + "--------------");

    System.out.print(' ');
    System.out.print(' ');
    for(int i = 0; i < SN.length; i++){
        System.out.print(SN[i]);
        System.out.print(' ');
    }
    System.out.println();
    return null;
}

NS是顶部的顶部数组

SW是底部的数组

WE是左侧的数组

EW是右侧的数组

board是2D数组

这是一个7x7的结果:

  1 4 2 2 2 3 4 
 --------------
1 | 0 0 0 2 0 0 1  | 4
3 | 3 4 0 0 0 0 0  | 2
3 | 0 0 0 1 0 0 0  | 2
2 | 0 1 0 0 0 0 0  | 4
6 | 0 0 0 0 0 6 0  | 1
2 | 5 0 1 0 0 4 0  | 2
4 | 0 0 0 0 0 0 0  | 2
 --------------
  2 1 3 4 3 2 3 
null

这是一个4x4的结果:

  1 4 2 2 
 --------------
1 | 0 0 0 2  | 4
3 | 3 4 0 0  | 2
3 | 0 0 0 1  | 2
2 | 0 1 0 0  | 4
 --------------
  2 1 3 4 
null

2 个答案:

答案 0 :(得分:1)

toString需要返回String,因此您应该构建一个StringBuffer并返回 - System.out.print,而不是返回null。可以使用StringUtils.repeat来实现水平线。

@Override
public String toString() {
    StringBuffer sb = new StringBuffer();
    sb.append("  ");
    for(int i = 0; i < NS.length; i++){
        sb.append(NS[i]+" ");
    }
    sb.append("\n");
    sb.append("   " + StringUtils.repeat("-", board.length) + "\n");

等...

    return sb.toString();
}

现在您的对象正确实现了toString(),您只需打印您的对象。

System.out.println(yourObject);

答案 1 :(得分:0)

我解决了我的问题。我创建了一个字符串,并使用基本相同的逻辑添加到它。

@Override
public String toString(){
    StringBuilder table = new StringBuilder();
    table.append("    ");

    for (int i = 0; i < NS.length; i++) {
        table.append(NS[i]);
        table.append(" ");

    }


    for (int i = 0; i < board.length; i++) {
        if (i % board.length == 0) {
            table.append("\n");
            for (int a = 0; a < 4; a++){
                table.append(" ");
            }
            for (int a = 0; a < board.length * 2; a++) {
                table.append("-");
            }

        }
    }

    table.append("\n");
    for (int j = 0; j < board.length; j++) {
        if (j % board.length == 0) {

            for (int r = 0; r < board.length; r++) {
                table.append(WE[r]);
                table.append(" | ");

                for (int c = 0; c < board[r].length; c++) {
                    table.append(board[r][c]);
                    table.append(" ");

                }
                table.append("| ");
                table.append(EW[r]);
                table.append("\n");

            }
        }
    }
    for (int i = 0; i < board.length; i++) {
        if (i % board.length == 0) {

            for (int a = 0; a < 4; a++){
                table.append(" ");
            }
            for (int a = 0; a < board.length * 2; a++) {
                table.append("-");
            }

        }
    }
    table.append("\n");
    table.append("    ");

    for (int i = 0; i < SN.length; i++) {
        table.append(SN[i]);
        table.append(" ");


    }
    return table.toString();

}