Насколько я понимаю, вы хотели бы показать какой-то крест.
И вы хотите обработать случай, когда матрица не квадрат.
Это означает, что вы можете напрямую пройти из всех углов в центральную точку, и если одна ось сначала достигнет середины массива, просто остановите счетчик и перейдите ко второму параметру.
что-то в этом роде (просто псевдокод):
//create square with "o" everywhere then overwrite
int i = 0;
int j = 0;
while(i < height/2 || j < width/2){
//go from all corners towards the middle
if (i == j){
square[i][j] = "x";
square[i][width - j+1] = "x";
square[height - i+1][j] = "x";
square[height - i+1][width - j+1] = "x";
} else if (i < height/2) { //i is in middle of array
square[i][j] = "x";
square[i][width - j+1] = "x";
} else { //j is is in middle of array
square[i][j] = "x";
square[height - i+1][j] = "x";
}
//as long i and j did not reach the center add 1
if (i < width/2) { i++ }
if (j < height/2) { j++ }
}
Надеюсь, это немного поможет.
В общем, я бы посоветовал разбить вашу проблему на разные части.
Я вижу логику в вашем решении, но постараюсь сделать его простым.
Найти правила, которые работают, пока условие выполняется.
(В этом случае: пока вы не находитесь в середине любого массива)
Затем попробуйте найти решение для случаев, которые не соответствуют действительности. (например, что произойдет, если я достигну середины массива, а j - нет)
Таким образом, вы можете разбить свой код и сделать его намного легче читать / поддерживать.
В большинстве случаев, когда у вас есть огромные операторы if else, есть большая вероятность, что вы можете переписать их на более мелкие части.