Java无法将值输入到二维数组中

时间:2016-10-19 21:18:42

标签: java arrays

我有这个问题,我必须用1和0来建模管道,管道周围的零点和管道本身的1是

我正在使用2D数组执行此操作,我的代码如下

for(int i = 0; i < x2; i++) { //x1 = 10, x2 = 20
        for(int j = 0; j < x2; j++) {
            if(i >= x2 - (x1+x2)/2 && j <= (x1+x2)/2) {
                pipeArray[i][j] = 1;
            } else {
                pipeArray[i][j] = 0;
            }
        }
    }

我的输出看起来像

 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 11111111111111110000
 11111111111111110000
 11111111111111110000
 11111111111111110000
 11111111111111110000
 11111111111111110000
 11111111111111110000
 11111111111111110000
 11111111111111110000
 11111111111111110000
 11111111111111110000
 11111111111111110000
 11111111111111110000
 11111111111111110000
 11111111111111110000

它需要看起来像

 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000111111111100000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000
 00000000000000000000

6 个答案:

答案 0 :(得分:1)

试试这个:

for(int i=0;i<x2;i++){
    for(int j=0;j<x2;j++){
        if(i > x2 - (x1+x2)/2 && j <= (x1+x2)/2 && i<=(x1+x2)/2 && j>(x2-(x1+x2)/2) {
            pipeArray[i][j] = 1;
        } else {
            pipeArray[i][j] = 0;
        }
    }
}

问题是你只检查它是低于还是高于一侧。您没有检查它是否高于或低于另一侧,看它是否在两者之间。

答案 1 :(得分:0)

这是你的条件i >= x2 - (x1+x2)/2 && j <= (x1+x2)/2。你说&#34;如果行大于5且列小于15,则放1&#34;。您需要说的是&#34;如果行大于5且小于15且列大于5且小于15&#34;

答案 2 :(得分:0)

您缺少两个条件:j&gt; =(x2 - (x1 + x2)/ 2)以限制左侧的1。你有一个正确的条件。我也&lt; =(x1 + x2)/ 2从底部开始限制。

for(int i = 0; i < x2; i++) { //x1 = 10, x2 = 20
    for(int j = 0; j < x2; j++) {
        if(i >= x2 - (x1+x2)/2 && i <= (x1 + x2)/2 && j <= (x1+x2)/2 && j >= (x1 - (x1+x2)/2)) {
            pipeArray[i][j] = 1;
        } else {
            pipeArray[i][j] = 0;
        }
    }
}

答案 3 :(得分:0)

你还没有真正正确地解释规则,但是对于想要的输出我假设你想要一个x2 x x2网格,其中1是{{1 x x1 - 在0&#39; s包围的中间阻塞。换句话说:

  • 如果坐标x1i 大于j但小于或等于(x2-x1)/2,则为1;否则有一个0。

它将被翻译成:

x2-(x2-x1)/2

答案 4 :(得分:0)

有两个问题:第一,必须添加第二个条件,第二个是最后只有4个0行/ 0,所以你仍然要减去,例如用(x1+x2-1)/2 < / p>

    for(int i = 0; i < x2; i++) { //x1 = 10, x2 = 20
        for(int j = 0; j < x2; j++) {
            if(i >= x2 - (x1+x2)/2 && j <= (x1+x2-1)/2 && j >= x2 - (x1+x2)/2 && i <= (x1+x2-1)/2) {
                pipeArray[i][j] = 1;
            } else {
                pipeArray[i][j] = 0;
            }
        }
    }

答案 5 :(得分:0)

对于任何管道:

TextView.setTypeface()