我正在编写一个wordsearch拼图,我需要编写一个名为isHorizontalSpaceFree()
的辅助方法。
该方法应检查(从aRow和aCol开始)是否有足够的可用空间将单词插入letterGrid(left to right)
。如果有足够的空间,则该方法应该返回true,否则它应该返回false。
如果字长超过数组的末尾,我需要该方法返回一个越界异常。
到目前为止,这是我的代码
public boolean isHorizontalSpaceFree(int aRow, int aCol, String word)
{
boolean result = true;
if (aCol < NUMBER_COLS - word.length())
{
int i = aCol;
while (aCol < NUMBER_COLS - word.length())
{
if (letterGrid[aRow][aCol] != BLANK_ELEMENT
|| aCol > NUMBER_COLS - word.length())
{
result = false;
}
aCol++;
}
}
else
{
result = false;
}
return result;
}
我希望它不会太远。
答案 0 :(得分:1)
根据您的代码,我假设您希望方法在以下情况下返回true:
aCol
和NUMBER_COL
之间有足够的剩余列以符合aRow
和aCol
之间的aCol + word.length()
中的每个单元格都是BLANK_ELEMENT
s 鉴于上述情况,以下内容应该有效:
public boolean isHorizontalSpaceFree(final int aRow, final int aCol, final String word) {
// Asserts that the word will fit in the remaining cells
if(aCol + word.length() > NUMBER_COLS) {
return false;
}
// Asserts that each cell in the row aRow between aCol and aCol+word.length() are empty
char[] columns = letterGrid[aRow] // I've assume your grid is made up of chars
for(int i = aCol; i < aCol + word.length(); i++) {
if(columns[i] != BLANK_ELEMENT) {
return false;
}
}
// There is enough remaining blank cells to insert the word
return true;
}
编辑:正如Andreas_D回答中提到的,这个方法不应该抛出异常,而只是返回true
和false
。
答案 1 :(得分:0)
如果单词很长,你不应该抛出异常,因为那可能(可能)不是异常条件。你可以简单地返回false,因为一个长度超过行长度的单词将不适合,你问题的答案是“isHorizontalSpaceFree?”是假的。
考虑案例word == null
或word.equals("")
的例外情况:
if (word == null || word.equals("")) {
// a null reference or an empty String are not allowed
throw new IllegalArgumentException("Word must not be null or empty");
}
if (word.length() > NUMBER_COLS) {
// a word that is longer then row does not fit (trivial case)
return false;
}