使用地形表示的篱芭的中间部分

时间:2016-11-11 08:19:21

标签: java arrays eclipse math

我正在使用地形表示围栏,其中1是围栏土地,0是空地。这是一张地图,例如:

0110

1111

1111

1101

代码是如何工作的,它扫描1的角落和边,并计算你需要多少米的围栏,其中1的每一边都是2.5米。 j变量就像x值,i是y值。我有侧面和角落的工作代码,我唯一需要帮助的是如何设置一个for循环的中心栅栏。这是我的工作代码:

.wrapper {
  position: relative;
}
.overlay{
  position: absolute;
  width: 100%;
  height: 100%;
}
.form-wrapper {
  text-align: center
}

我不确定我是否会使用for循环扫描核心,但我想它会像侧循环一样。任何人都知道代码会是什么样的?

1 个答案:

答案 0 :(得分:0)

因此,给定一个零和一的矩阵,您需要计算可以找到的从一到零(上下,左右)的过渡数。每一个都会产生2.5米长的围栏。边界计为零。

你有很多复制粘贴的if语句来检查这个。我建议使用以下重写,它使用方法来避免复制粘贴代码。

/**
 * returns the number of zero-or-border neighbors for a 1 
 * in a 2D array of ints that can be either 1 or 0
 */
public static int bordersFor(int[][] map, int row, int col) {
    int borders = 0;
    // left
    if (col == 0 || map[row][col-1] == 0) borders ++;
    // right
    if (col == map[0].length-1 || map[row][col+1] == 0) borders ++;
    // up
    if (row == 0 || map[row-1][col] == 0) borders ++;
    // down
    if (row == map.length-1 || map[row+1][col] == 0) borders ++;

    return borders;
}

public static int bordersFor(int[][] map) {
    int borders = 0;
    for (int row=0; row<map.length; row++) {
        for (int col=0; col<map[0].length; col++) {
            if (map[row][col] == 1) borders += bordersFor(map, row, col);
        }
    }
    return borders;
}

public static void main(String ... args) {
    int[][] map = {
            { 0, 1, 1, 0 },
            { 1, 1, 1, 1 },
            { 1, 1, 1, 1 },
            { 1, 1, 0, 1 }
    };
    System.out.println(bordersFor(map));
}