什么是垂直遍历二维数组以编程方式找到“空”集的有效方法?

时间:2011-02-04 22:44:16

标签: java arrays multidimensional-array

首先,这不是作业;)。我正试图从头开始创建一个wordsearch游戏并遇到障碍我需要一些指导。

我正在使用二维数组的字符来进行wordsearch的网格。我非常适合在水平方向放置这些数组中的单词,但我真的不知道如何垂直地执行此操作。

这是我到目前为止,你应该只能复制/粘贴它并运行它

import java.util.ArrayList;
import java.util.List;

public class WordGame
{
    private static List<String> words = new ArrayList<String>();
    private static int longestWordLength = 0;
    private static int padSize = 4;
    private static char[][] grid = null;

    public static void main(String[] args)
    {
        initialiseWords();
        workOutLongestWord();
        setupGrid();
        printIt();
    }

    private static void printIt()
    {
        for (int i = 0; i < grid.length; i++)
        {
            for (int j = 0; j < grid.length; j++)
            {
                System.out.print(grid[i][j]);
            }
            System.out.print("\n");
        }
    }

    private static void setupGrid()
    {
        grid = new char[longestWordLength + padSize][longestWordLength + padSize];

        for (int i = 0; i < grid.length; i++)
        {
            String w = (i >= words.size()) ? "?" : words.get(i);
            for (int j = 0; j < grid.length; j++)
            {
                grid[i][j] = (j >= w.length()) ? '?' : w.charAt(j);
            }
        }
    }

    private static void workOutLongestWord()
    {
        for (String word : words)
        {
            if (word.length() > longestWordLength)
            {
                longestWordLength = word.length();
            }
        }
    }

    private static void initialiseWords()
    {
        words.add("monkey");
        words.add("cow");
        words.add("elephant");
        words.add("kangaroo");
    }
}

打印出类似......的内容。

monkey??????
cow?????????
elephant????
kangaroo????
????????????
????????????
????????????
????????????
????????????
????????????
????????????
????????????

我需要在左/右手边随机填充它们,但我可以自己做。

问题:尝试将单词垂直放入二维数组中的有效方法是什么?我最初的想法是向下计算所需的单词长度,如果找到?以外的其他任何内容则会中断,并继续这样做,直到找到该单词的空格。但是,一旦我考虑到单词重叠,这种情况就不会很好了。

任何指针?

2 个答案:

答案 0 :(得分:1)

垂直应该能够使用与水平相同的方法。就像你说的那样从一个地方开始,只要你有空格或者空格中包含你要插入的单词中的字母,就会向下移动。

答案 1 :(得分:1)

在实施“战舰”时,我在C中遇到了类似的问题。不同的船只有不同的尺寸,你不能让它们相交。

一旦你有垂直单词,你需要检查你的水平单词是否也会出现。

我建议创建一个“Word”类,它是一个围绕String的瘦类。您只需要跟踪以下内容。

  1. 世界上的x,y位置/指数
  2. 这个词是什么
  3. 单词的长度(由Java中的String赋予)
  4. 单词的方向(向上向下)
  5. 然后创建一个验证单词放置的方法。 E.G,整个字必须在板上,没有碰撞。您可以通过一系列线段对单词碰撞进行建模。这可以通过使用rect到rect碰撞算法来完成,其中一个维度几乎为1。