Java 在二维阵列中查找封闭区域

Java 在二维阵列中查找封闭区域,java,arrays,2d,Java,Arrays,2d,所以我正在编写一个游戏,其中一个角色向4个方向移动,无论它移动到哪里,它都将坐标存储在500x700维的二维数组中 如果字符移动到坐标5,10,则数组[5][10]将设置为1。否则,0 我想在这个数组中找到一个矩形的封闭区域。我该怎么做呢?我不知道,我已经尝试了所有的尝试和错误,但有人能帮我吗?提前谢谢你 编辑**** 假设我有一个10x10的2D阵列: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

所以我正在编写一个游戏,其中一个角色向4个方向移动,无论它移动到哪里,它都将坐标存储在500x700维的二维数组中

如果字符移动到坐标5,10,则数组[5][10]将设置为1。否则,0

我想在这个数组中找到一个矩形的封闭区域。我该怎么做呢?我不知道,我已经尝试了所有的尝试和错误,但有人能帮我吗?提前谢谢你

编辑****

假设我有一个10x10的2D阵列:

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
我的问题是,当周围有一个1的矩形时,我将如何搜索它

例如:

0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 0 0 0
0 1 0 0 0 0 1 0 0 0
0 1 0 0 0 0 1 0 0 0
0 1 0 0 0 0 1 0 0 0
0 1 0 0 0 0 1 0 0 0
0 1 0 0 0 0 1 0 0 0
0 1 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
从[1][1]开始的1应检测为区域42的矩形。6宽7长

我尝试的是用for循环遍历数组,然后每当有1时,搜索长度和高度,并确定是否存在于另一侧,在距离n的位置相同的长度。这样做是否恰当?什么是更有效的解决方案?

试试以下方法:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class test {
public static void main(String[] args) {

    Integer[][] intArray = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                        {0, 1, 1, 1, 1, 1, 1, 0, 0, 0},
                        {0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
                        {0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
                        {0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
                        {0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
                        {0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
                        {0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
                        {0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
                        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                        {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};

    int highestFreq = 0;
    List<Integer> freqList = new ArrayList<Integer>();
    for(Integer[] intArrays : intArray ){
        List<Integer> arrays = Arrays.asList(intArrays);
        int freq = Collections.frequency(arrays, 1);
        if(freq > highestFreq){
            highestFreq = freq;
        }

        if(freq > 0){
            freqList.add(freq);
        }

    }

    Integer count = 0;
    for( Integer ints : freqList.subList(1, freqList.size()-1 )){

        if(ints.equals(freqList.get(1))){
                count += 1;
        }

        if(count == freqList.size() - 2){

            System.out.println(highestFreq * freqList.size());
                    //prints 48

        }
        };

}


}

请张贴你尝试过的内容,以及你认为失败的原因。还有,你所说的矩形封闭区域是什么意思?这个阵列是如何设置的?每行都是一个子数组吗?@Bryan:这是一个2D数组。所以基本上你是对的。