2015-12-22 7 views
-5

Если у меня есть двумерный массив в Java:Сравнить элементы в массиве 2d java?

1 0 0 
0 1 0 
1 0 1 

И у меня есть еще один меньший или эквивалентного размера:

1 0 
0 1 

Как бы мне найти матчи, где область значений внутри первого массив равен второму массиву?


Например, если разбить первый массив на несколько различных небольших массивов, каждый из которых имеет те же размеры, что и второй ...

Это будет верхний левый угол:

1 0 
0 1 

Вот верхний правый угол:

0 0 
1 0 

И так далее ...

Как я могу проверить, если один из расколов первого массива равен второму массиву


Это код, который я использовать для определения массивов:

public static void main(String argv[]) 
{ 
    int a[][] = { {1,0,0}, {0,1,0}, {1,0,1} }; 
    int element[][] = {{1,0}, {0,1}}; 
} 

И затем я пытаюсь используйте Arrays.deepEquals(Array1, Array2), чтобы сравнить их.

+0

Это еще не совсем понятно. 1 вы хотите проверить все подмассивы первого? 2 что вы еще закодировали? –

+0

Я считаю, что OP пытается увидеть, является ли меньший массив 2x2 «частью» большего массива 3x3. Часть представляет собой 4 2x2 массива, которые вы можете получить от 3x3. Впрочем, только гадать. – gonzo

+1

@PJA Цель переполнения стека должна быть * поисковым хранилищем * вопросов программирования и ответов, поэтому другие могут использовать для поиска решений для своих задач программирования. Если ваш вопрос не написан таким образом, чтобы он дал понять, что вы должны его отредактировать и предоставить больше информации в вопросе. В то время как ссылки великолепны как * дополнительный источник информации, они не могут быть его основным * источником, поскольку они могут легко ломаться, что сделает ваш вопрос бесполезным для других (также мы не можем найти ваш вопрос на основе контента из ссылки - особенно если это видео). – Pshemo

ответ

1

Вы можете вырезать массив по x и y, посмотрев на значения в [x, y] на [x + 1, y + 1].

public static int[][] cut(int[][] source, int x, int y) 
{ 
    return new int[][]{ 
     new int[]{ source[x][y], source[x + 1][y] }, 
     new int[]{ source[x][y + 1], source[x + 1][y + 1] } 
    }; 
} 

Примечание. Эта функция предполагает, что ваш массив квадратный. Затем итерацию по большому массиву, резку и сравнение. Поскольку наша функция разреза принимает массив 2x2, мы останавливаемся до того, как x и y перейдут к краю большого массива (следовательно, x < large.length - 1).

public static boolean test(int[][] large, int[][] small) 
{ 
    for (int x = 0; x < large.length - 1; x++) 
     for (int y = 0; y < large[0].length - 1; y++) 
     { 
      int[][] part = cut(large, x, y); 
      if (Arrays.deepEquals(part, small)) 
       return true; 
     } 
} 
Смежные вопросы