如果形状在给定isFilledAt()
位置具有填充块,则true
方法返回row/col
,如果块为空,则返回false
。如果该位置超出界限,请提出FitItException
并提供信息性消息。我正在运行一个嵌套循环来获取位置,并且无法确定一个位置是否超出界限。 smb可以帮忙吗?提前谢谢!
public class CreateShape {
private int height;
private int width;
private char dc;
private Rotation initialPos;
public CreateShape(int height, int width, char dc)
{
this.height = height;
this.width = width;
this.dc = dc;
initialPos = Rotation.CW0;
}
public boolean isFilledAt(int row, int col)
{
char[][] tempArray = new char[height][width];
for(int i = 0; i < tempArray.length; i++)
for(int j = 0; j < tempArray[i].length; j++)
{
if(row > tempArray.length || row < 0)
throw new FitItException("Out of Bounds!");
if(tempArray[row][col] == dc)
return true;
}
return false;
}
答案 0 :(得分:3)
您需要检查row
或col
是否小于零,或row
是否大于或等于height
,或{{1}大于或等于col
。请注意,您只需要进行一次验证,因此您可以将检查移到循环外:
width
但请注意,public boolean isFilledAt(int row, int col) {
if (row < 0 || row >= height || col < 0 || col >= width) {
throw new FitItException("Out of Bounds!");
}
char[][] tempArray = new char[height][width];
for (int i = 0; i < tempArray.length; i++) {
for (int j = 0; j < tempArray[i].length; j++) {
if (tempArray[row][col] == dc) {
return true;
}
}
}
return false;
}
可能无法按预期运行。由于每次调用方法时都会重新创建isFilledAt()
,因此条件tempArray
可能永远不会评估为tempArray[row][col] == dc
。
答案 1 :(得分:1)
您应该按如下方式更改isFilledAt方法
public boolean isFilledAt(int row, int col)
{
char[][] tempArray = new char[height][width];
// Calls the method that fills tempArray datas
if ( (row >= height || row <0) || (col >= width || col < 0)) {
throw new FitItException("Out of Bounds!");
}
for(int i = 0; i < height; i++)
for(int j = 0; j < width; j++)
{
if(tempArray[row][col] == dc)
return true;
}
}
return false;
}
您将返回false放在错误的位置:如果查找的值不在第一行内,它会系统地返回false。而是在迭代每一行后返回false