因此,我在“处理”中对游戏进行编程,其中角色在4个方向上移动,无论在何处移动,它都将其坐标存储在500x700维度的2D数组中。
如果角色按照说法移动到坐标(5,10),则数组[5] [10]将设置为1.否则为0。
我想要找到的是这个数组中的矩形封闭区域。我怎么会继续这样做呢?我不知道,我已经通过反复试验尝试了所有内容,但有人可以帮助我吗?提前谢谢!
编辑****
所以,让我说我有一个10x10的二维数组:
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时,搜索长度和高度,并确定是否存在于另一侧,位置相同的长度&# 34; N"远。这样做是否合适?什么是更有效的解决方案?
答案 0 :(得分:0)
试试这个:
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
}
};
}
}