2
我有困难的时候试图弄清楚为什么方法工作不正确。设置布尔方法始终输出true?
我的方法addtoHash()
总是返回true,由于某种原因它也只是着眼于第一个值返回true之前。
很抱歉,如果这是有点混乱,我的代码应该更好地解释它!
本来我的代码是这样的,它肯定工作:
public void addtoHash(Set reserve, int value)
{
if(value > 0 && value < 10)
{
reserve.add(value)
}
}
public boolean squareCheck(int[][][] board, int index)
{
Set<Integer> reserve = new HashSet<>();
for(int r = 0; r < board[0].length; r++)
{
for(int c = 0; c < board[0].length; c++)
{
addtoHash(reserve,board[index][r][c]);
if(r == 2 && c == 2 && reserve.size() < 9)
{
System.out.println("Error in grid " + index);
return false;
}
}
}
return true;
}
因为我想让它我改变addtoHash()返回一个布尔值,而不是更多的有用:
public boolean addtoHash(Set reserve, int value)
{
if(value > 0 && value < 10)
{
return reserve.add(value) == true;
}
return false;
}
public boolean squareCheck(int[][][] board, int index)
{
Set<Integer> reserve = new HashSet<>();
for(int r = 0; r < board[0].length; r++)
{
for(int c = 0; c < board[0].length; c++)
{
if(!addtoHash(reserve,board[index][r][c]))
System.out.println("Error at " + index+r+c);
return false;
}
}
return true;
}
检查如果这样工作:
int[][][] solved = {{{5,3,2},{6,7,2},{1,9,8}}, //My new code doesn't find the duplicate and return false here, despite my previous code having done so!
{{6,7,8},{1,9,5},{3,4,2}},
{{9,1,2},{3,4,8},{5,6,7}},
{{8,5,9},{4,2,6},{7,1,3}},
{{7,6,1},{8,5,3},{9,2,4}},
{{4,2,3},{7,9,1},{8,5,6}},
{{9,6,1},{2,8,7},{3,4,5}},
{{5,3,7},{4,1,9},{2,8,6}},
{{2,8,4},{6,3,5},{1,7,9}}};
validCheck checker = new validCheck();
checker.squareCheck(solved,0);
然而,运行它几次后,使用System.out.println()
,我发现它总是返回true
;打印出集后,我发现,它只是检查的第一个值,所以输出会[5] true
。
有什么错我的逻辑,这就是为什么它总是返回true,还是有别的东西,我失踪?
你得到的答案是正确的。另外,对于循环变量,'r'和'c'都迭代到'board [0] .length'。这对我来说似乎是错误的,因为'r'和'c'不在数组的同一维中。 –