0

我有两个 2D 字符数组,一个“大”和一个“小”,并且想找到较小的字符数组在较大的字符数组中的位置。

例子:

较大的是

jfbsvdfaakjdfb
dsvkfvwaaksghd
aadkfghsgkdldl
aakdfghfgbkjbb
fdkbaadfkgaskj

较小的是

aa
aa

它将位于 [0, 7] 和 [2,0]

我想知道比较两者最简单的方法是什么?现在,我正在考虑 for 循环,它首先比较数组的第一个元素,如果它们不匹配,直到匹配,然后一旦匹配,更多的 for 循环比较每个元素以查看它们是否匹配. 另一个选项是设置 HashMaps,但我不确定如何设置或使用它们来获得结果。

在修改了其中一个建议后,我想出了以下代码: public static int[] findWaldo(char [][] large, char [][] small) {

    public static void main(String[] args) {
    char i [][] = new char[][]{
            {'d', 's', 'l', 'e', 'i', 'g', 'h', 'e', 'i', 'j', 'a', 's', 'l', 'd', 'k', 'j'},
            {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'W', 'w', 'Z', 'Z', 'Z', 'W', '1', 'l', 'k'},
            {'h', 'i', 'j', 'k', 'l', 'm', 'n', 'Z', 'A', 'a', 'Z', 'a', 'Z', '2', 'i', 'n'},
            {'o', 'p', 'q', 'r', 's', 't', 'u', 'Z', 'Z', 'L', 'l', 'Z', 'Z', '3', 'i', 'v'},
            {'v', 'w', 'x', 'y', 'z', '1', '2', 'Z', 'd', 'Z', 'D', 'd', 'Z', '4', 'q', 'i'},
            {'3', '4', '5', '6', '7', '8', '9', 'o', 'Z', 'Z', 'o', 'O', 'Z', '5', 'b', 'v'},
            {'k', 'e', '8', '7', '8', '4', 'j', 'f', 'l', 'k', 'a', 'v', '8', '8', 'h', 'j'}
    };

    char w [][] = new char[][]{
            {'W', 'w', '.', '.', '.', 'W', '1'},
            {'.', 'A', 'a', '.', 'a', '.', '2'},
            {'.', '.', 'L', 'l', '.', '.', '3'},
            {'.', 'd', '.', 'D', 'd', '.', '4'},
            {'o', '.', '.', 'o', 'O', '.', '5'}
    };

    find(i, w);
}

    public static int[] find(char [][] image, char [][] waldo) {
    for (int i = 0; i < waldo.length; i++) {
        char[] largerCharArray= large[i];
        String largerString = new String(largerCharArray);

        //used for debug purposes
        char[] array = largerCharArray;

        char [] smallCharArray = small[i];
        String smallString = new String(smallCharArray);

        char[] array1 = smallCharArray;

        System.out.println(largerString.indexOf(smallString));
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(array1));
    }

    return null;
}

这段代码所做的只是打印较大数组的第一部分,这是有原因的吗?(请忽略小数组中的 .,因为它们将代表任何字符,所以它本质上是匹配的。

4

1 回答 1

0

一个简单的实现只是将它们转换为字符串。字符串是表示字符数组的绝佳对象!他们还有一个额外的好处,那就是内置做这类事情的好方法。

char[] largerCharArray= {'j','f','b'/*and so on...*/};
String largerString = new String(largerCharArray);
// or largerString = "jfbsvdfaakjdfb";

char [] smallCharArray = {'a', 'a'};
String smallString = new String(smallCharArray);
// or smallString = "aa";

System.out.println(largerString.indexOf(smallString));
于 2013-10-22T21:58:08.663 回答