与战舰类似。如何使用这样的边框打印降序?

时间:2017-01-15 20:59:34

标签: java multidimensional-array

所以我有一个我创建的程序,它是一个基于建筑物中的地板和房间的游戏。 2D阵列的行和列的大小可以基于用户输入而改变。我想要做的是有一个方法,在用户输入的每个猜测时打印出2D数组,类似于玩战舰。

请注意图像的左下角是[0] [0],因此阵列的打印需要从上到下下降。任何帮助将不胜感激。

PS:我已经有一个方法用空格填充数组,并且当用户1或2猜测它用#填充数组的元素39; 1'或者' 2'。

以下是截图: Screenshot

到目前为止我尝试过的(这是我的toString打印方法的一部分。必须返回一个字符串。

public String toString() {
    String returnStr = "";
    for (int i = 0; i < this.myHidingPlaces.length; ++i) {
        if (i == this.myHidingPlaces.length - 1) {
            returnStr += this.myHidingPlaces[i][0] + "\n ";
            for (int j = 0; j < this.myHidingPlaces[i].length; ++j) {
                returnStr += this.myHidingPlaces[i][j] + " ";
            }
        } 
        else {
            returnStr += this.myHidingPlaces[i][0];
        }
    }
    return returnStr;
}

2 个答案:

答案 0 :(得分:1)

以相反的顺序运行高度循环:

public String toString() {
    String returnStr = "";
    for (int i = this.myHidingPlaces.length - 1; i >= 0; i--) {
        for (int j = 0; j < this.myHidingPlaces[i].length; j++) {
            returnStr += this.myHidingPlaces[i][j] + " ";
        }
        returnStr += "\n";
    }
    return returnStr;
}

答案 1 :(得分:1)

首先,您可以创建char[][]来存储电路板。电路板的高度为1(顶行)+ 2 *行数。电路板宽度为1(此侧线)+ 4 *列数。

int boardHeight = 1 + 2*myHidingPlaces.length;
int boardWidth = 1 + 4*myHidingPlaces[0].length;
char[][] board = new char[boardHeight][boardWidth];

让我们以干净的状态启动电路板;将每个char ' '空格字符设为每个for(int i = 0; i < boardHeight; i++) { for(int j = 0; j < boardWidth; j++) { board[i][j] = ' '; } }

'_'

除了第一个和最后一个字符

之外,每隔一行都是for(int i = 0; i < boardHeight; i += 2) { for(int j = 1; j < boardWidth - 1; j++) { board[i][j] = '_'; } } 个字符
'|'

除第一行外,每第四列都是for(int i = 1; i < boardHeight; i++) { for(int j = 0; j < boardWidth; j += 4) { board[i][j] = '|'; } } 个字符

myHidingPlaces

然后您需要将y = height - y - 1中的所有元素填入主板。必须进行从逻辑数据到视图数据的转换。首先翻转行值(for(int y = 0; y < myHidingPlaces.length; y++) { for(int x = 0; x < myHidingPlaces[0].length; x++) { if (myHidingPlaces[y][x] == 0) { continue; } int i = myHidingPlaces.length - y - 1; i = 1 + 2*i; int j = 2 + 4*x; // translate int to char; char val = (char) (myHidingPlaces[y][x] + '0'); board[i][j] = val; } } ),然后将x和y分量缩放到正方形的中间位置:

for(int i = 0; i < boardHeight; i++) {
    System.out.println(String.valueOf(board[i]));
}

最后将电路板逐行打印到屏幕上;

int[][] myHidingPlaces = new int[][] {
        {2,0,0},
        {0,0,0},
        {0,0,0},
        {0,0,1},
        {0,0,0},
};

样板:

 ___________ 
|   |   |   |
|___|___|___|
|   |   | 1 |
|___|___|___|
|   |   |   |
|___|___|___|
|   |   |   |
|___|___|___|
| 2 |   |   |
|___|___|___|

示例输出:

$qb = Item::newQuery();

if (!empty($mode))
{
    $qb->whereIn('mode_id', $mode);
}

if (!empty($type))
{
    $qb->whereIn('type_id', $type);
}

if (!empty($group))
{
    $qb->whereIn('group_id', $group);
}

$results = $qb->paginate(10);