用于迭代的java2dim表

bwntbbo3  于 2021-07-05  发布在  Java
关注(0)|答案(3)|浏览(384)

我正在写一个“数独”程序,我需要写一个方法来检查一个数字,用户想要插入的某个单元格中是否已经包含行、列或区域。我的代码如下所示(此时我只检查行中的数字,setnumber返回一个布尔值,指示是否可以插入该数字):

public boolean setNumber(int row, int column, int number) {  
    if (this.isEmpty(row, column)) {  
     if (!this.rowContains(row, number)) {  
      return true;  
     } else {  
      return false;  
     }  
    } else {  
     return false;  
    }  
  }  

  private boolean rowContains(int row, int number) {  
   for (int i=0; i < this.cells[row].length; i++) {  
    if (this.cells[row][i].getNumber() == number) {  
     return true;  
    }  
   }  
   return false;  
}

现在,同一个数字可以插入多次,所以显然rowcontains总是返回false,但是为什么呢?

mm5n2pyu

mm5n2pyu1#

你的代码片段看起来应该对我有用。
老好人应该是你的救星。只需将语句放入代码中,就可以看到发生了什么(例如:)

private boolean rowContains(int row, int number) {  
 for (int i=0; i < this.cells[row].length; i++) {  
  if (this.cells[row][i].getNumber() == number) {  
   System.err.println("Row " + row + " contains target number " + number + " in cell " + i);
   return true;  
  }  
 }  
 System.err.println("Row " + row + " does not contain target number " + number);
 return false;
}

这不会解决你的问题,但它会让你更好地了解你的期望在哪里失效。
编辑:我刚刚又看了一遍你的代码,看看是否有什么东西跳到我身上-它没有(我怀疑你的问题在其他地方-你确定你真的设置了每个电话号码吗?)。不过,我注意到一个成语:

if (condition)
    return true;
else
    return false;

哪一个更好呢

return condition;

以“直接的方式”做事往往被认为是(无论好坏)缺乏经验的开发人员的标志。

thtygnil

thtygnil2#

setnumber不是一个很好的名称(例如,可以将其命名为checknumber或cansetnumber)“set”应用于有副作用的方法(在对象中设置值)。
您应该确保实际设置了单元格数组中的数字,这可能是您可以在同一行中多次设置的原因。

elcex8rz

elcex8rz3#

如果 setNumber 不是用词不当 canSetNumner 我希望它包含一个

cells[row][column].setNumber(number);

就在火车站前排队

return true;

相关问题