Прежде всего, i и j не должны повторяться до 3 (если вы находитесь на [3] [3], вы знаете, что это не может быть началом подматрицы, потому что в основном вы находитесь в конце матрица).
Во-вторых, не используйте фиксированные числа, например 4 - используйте вместо него a.length (это дает вам длину массива a - количество столбцов, в то время как длина [0] .pl даст вам длину первого столбца - эффективно , количество рядов).
В-третьих, я бы изменил четверку if
(sic) на двойную for
, итерируя по k и l, вот так:
for (int i = 0; i < a.length - b.length + 1; i++) {
for (int j = 0; j < a[0].length - b[0].length + 1; j++) {
boolean submatrix = true; // at start we assume we have a submatrix
for (int k = 0; k < b.length; ++k) {
for (int l = 0; l < b[0].length; ++l) {
if (a[i + k][j + l] == b[k][l]) {
System.out.println("a[" + (i + k) + "][" + (j + l) + "] = b[" + k + "][" + l + "]");
} else {
submatrix = false; // we found inequality, so it's not a submatrix
}
}
}
if (submatrix) {
System.out.println("Found subatrix at " + i + "," + j + ".");
}
}
}
(Не уверен, что это точно работает, не ставил его через компилятор;))
Кроме этого, если вы используете java, вы должны попытаться привыкнуть к объектам, классам и методам (Matrix
класс с boolean isSubmatrix(Matrix b)
методом) - но для начинающих это следует делать.
Надеюсь, мой ответ поможет.