我试图在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新手,所以请耐心等待。
答案 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);