在Java中用数组中的for循环替换值

时间:2015-02-16 14:08:24

标签: java arrays for-loop

我试图在Java中将数组的第一行和最后一行设置为1,但只有数组中的第一个元素被更改。我的代码如下所示:

public void createArray(int height, int width){

        this.boardArray = new int [height][width];

        for (int i = 0; i < height; ++i){
            for (int j = 0; i < width; ++i){
                if (i == 0 || i == height){
                    this.boardArray[i][j] = 1;
                }
            }
        }
    }

但是当我这样做时,我得到了这个结果:

1 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

但我无法弄清楚原因。

任何关于如何解决这个问题的建议都会受到赞赏,我是Java新手,所以请耐心等待。

3 个答案:

答案 0 :(得分:3)

你的第二个循环中有一个简单的拼写错误:

for (int j = 0; i < width; ++i){

应该是

for (int j = 0; j < width; ++j){

此外,条件i == height永远不会是true,就像您明确测试的第一个循环i < height一样。

当你只需要一个循环时,你可以避免使用两个循环:

for (int j = 0; j < width; ++j){
    this.boardArray[0][j] = 1;
    this.boardArray[height-1][j] = 1;
}

答案 1 :(得分:1)

我认为正确的代码如下所示:

public void createArray(int height, int width){

    this.boardArray = new int [height][width];

    for (int i = 0; i < height; ++i){
        for (int j = 0; j < width; ++j){ //change i to j
            if (i == 0 || i == height - 1){ // also fill last row with ones
                this.boardArray[i][j] = 1;
            }
        }
    }
}

但是您不必遍历整个数组来访问第一行和最后一行。因此,具有更好性能的另一种方式如下所示:

public void createArray(int height, int width){

    this.boardArray = new int [height][width];
    if(height > 0) {
        Arrays.fill(this.boardArray[0], 1);
        if(height > 1) {
            Arrays.fill(this.boardArray[height - 1], 1);
        }
    }
}

最大的区别在于,第一个解决方案的时间复杂度为O(height*width),第二个解决方案只有O(width)。这是一个巨大的差异。

答案 2 :(得分:1)

也许这个解决方案更具可读性:

Arrays.fill(boardArray[0], 1);
Arrays.fill(boardArray[height-1], 1);