Wordsearch拼图方法

时间:2012-03-02 10:44:53

标签: java

我正在编写一个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;
    }

我希望它不会太远。

2 个答案:

答案 0 :(得分:1)

根据您的代码,我假设您希望方法在以下情况下返回true:

  1. aColNUMBER_COL之间有足够的剩余列以符合
  2. 这个词
  3. aRowaCol之间的aCol + word.length()中的每个单元格都是BLANK_ELEMENT s
  4. 鉴于上述情况,以下内容应该有效:

    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回答中提到的,这个方法不应该抛出异常,而只是返回truefalse

答案 1 :(得分:0)

如果单词很长,你不应该抛出异常,因为那可能(可能)不是异常条件。你可以简单地返回false,因为一个长度超过行长度的单词将不适合,你问题的答案是“isHorizo​​ntalSpaceFree?”是假的。

考虑案例word == nullword.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;
}