Создание нового двумерного массива

Нужна помощь с решением задачи. Надо заменить исходный массив новым, в котором удалён столбец содержащий только отрицательные значения, если таких столбцов несколько, то удалить только последний столбец, если требуемого столбца нет, то вывести исходный массив. Я написала код для нахождения первоначального массива, но как задать соответствующие условия не представляю.

    public class Lalala {
    public static void main(String[] args) {
    int m = 4, n=5; 
    int  numb;
    boolean in_array = true;
    int[][] arr = new int[m][n];
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++) {
            
            do {
                in_array = false;
                
                numb = (int) (Math.random() * 199) -99;
                
                for (int k = 0; k < i; k++) {
                    if ((int) arr[k][j] == (int) numb) {
                        in_array = true;
                        break;
                    }
                }
            } while(in_array);
            arr[i][j] = numb; 
   
            System.out.printf("%5d",numb); 
        }
        System.out.println( ); 
    }
}


}

Ответы (1 шт):

Автор решения: Nowhere Man

Как написал @Эникейщик в комментарии, следует проверять каждый столбец, начиная с последнего, что элементы во всех его строках -- отрицательные числа.

Результатом проверки должен стать некий R-ый индекс подходящего столбца, если столбец не будет обнаружен, этот индекс окажется равным -1, так как итерации будут происходить от n - 1-го столбца до 0-го по убыванию. Как только столбец будет обнаружен (обозначим его R), можно будет досрочно выйти из внешнего цикла.

При наличии кандидата на удаление, можно либо создать новый массив на n - 1 столбец, в который следует скопировать нужные данные первоначальной матрицы, пропуская значения в R-м столбце. Либо можно, начиная от R-го столбца, сдвинуть все строки на 1 элемент влево, и после сдвига уменьшить размер каждой строки на 1 при помощи Arrays.copyOf.

→ Ссылка