首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 2dim table for-iteration

Java 2dim table for-iteration
EN

Stack Overflow用户
提问于 2009-11-03 21:48:43
回答 3查看 61关注 0票数 0

我正在写一个'Sudoku‘程序,我需要写一个方法来检查用户想要插入到某个单元格中的数字是否已经包含在行、列或区域中。我的代码看起来像这样(此时我只检查行中的数字,setNumber返回一个布尔值,指示数字是否可以插入):

代码语言:javascript
复制
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,但是为什么呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-03 22:23:04

如果setNumber不是对canSetNumner的错误描述,我希望它包含一个

代码语言:javascript
复制
cells[row][column].setNumber(number);

属性之前的行。

代码语言:javascript
复制
return true;
票数 0
EN

Stack Overflow用户

发布于 2009-11-03 22:11:15

在我看来,您的代码片段应该可以工作。

老的println调试应该是你的救星。只需将语句放入代码中,让您看到发生了什么(例如:)

代码语言:javascript
复制
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;
}

这不会解决你的问题,但它会让你更好地了解你的期望在哪里失效了。

编辑:我刚刚又看了一遍你的代码,看看是否有什么东西突然出现在我身上--没有(我怀疑你的问题出在别的地方--你确定你真的在设置每个呼叫的号码吗?)。然而,有一件事我确实注意到了,那就是成语:

代码语言:javascript
复制
if (condition)
    return true;
else
    return false;

这在几乎所有方面都更好,因为

代码语言:javascript
复制
return condition;

做事情的“常规方式”往往被认为是(不管是好是坏)一种sign of an inexperienced developer

票数 0
EN

Stack Overflow用户

发布于 2009-11-03 22:26:16

setNumber不是一个很好的名字(例如,我会将其命名为checkNumber或canSetNumber )。‘'set’应该用于有副作用的方法(在对象中设置值)。

你应该确保你实际设置了单元数组中的数字,这可能是为什么你可以在同一行中多次设置的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1667430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档