Удаление столбиков с матрицы при нахождении максимального числа в нём [JAVA]

Помогите пожалуйста. Есть массив чисел short A[7][7]. Нужно удалить с массива все столбики, в которых присутствует максимальный элемент массива(Например, если максимальный элемент массива это число 99, то нужно удалить ВСЕ столбики, в которых ПРИСУТСТВУЕТ число 99). У меня же в коде если в матрице попадается 2 максимальных елемента или больше то только один столбец из них будет удален

    package com.company;

    import java.lang.reflect.Array;
    import java.util.ArrayList;
    import java.util.Arrays;

    public class Main {


static short MAX = 0;

static void init(Short[][] A) {
    for (int i = 0; i < A.length; ++i) {
        for (int j = 0; j < A[i].length; ++j) {
            A[i][j] = A[i][j] = (short) ((int) (Math.random() * 200));
        }
    }
}


static void Search(Short A[][]) {
    short max = 0;

    for (int i = 0; i < A.length; ++i) {
        for (int j = 0; j < A.length; ++j) {
            if (A[i][j] > max) {
                max = A[i][j];
            }
        }
    }
    MAX = max;
    System.out.println("Максимальный элемент в массиве: " + max);
}

public static <T> T[] deleteElement(T[] src, int idx) {
    if (idx > src.length - 1)
        throw new RuntimeException("idx > src length");
    @SuppressWarnings("unchecked")
    T[] dest = (T[]) Array.newInstance(src[0].getClass(), src.length - 1);
    for (int i = 0; i < src.length; i++) {
        if (i < idx) {
            dest[i] = src[i];
        } else if (i > idx) {
            dest[i - 1] = src[i];
        }
    }
    return dest;
}

public static <T> T[][] deleteRow(T[][] src, int idx) {
    if (idx > src.length - 1)
        throw new RuntimeException("idx > src length");
    for (int i = 0; i < src.length; i++) {
        src[i] = deleteElement(src[i], idx);
    }
    return src;
}

static <T> void print2DArray(T[][] src) {
    for (int i = 0; i < src.length; i++) {
        System.out.println(Arrays.toString(src[i]));
    }
}


public static void main(String[] args) {
    int N = 7;
    /*Short[][] array = {
            {1, 2, 3, 4},
            {11, 22, 33, 44},
            {111, 333, 333, 44},

    };*/

    Short[][] array = new Short[N][N];
    init(array);
    print2DArray(array);
    System.out.println();
    Search(array);

    int max;
    ArrayList<Integer> rowsIndex = new ArrayList<>();

    max = array[0][0];
    for (int r = 0; r < array.length; r++) {
        for (int c = 0; c < array.length; c++) {
            if (array[r][c] > max) {
                max = array[r][c];
            }
        }
    }

    for (int r = 0; r < array.length; r++) {
        for (int c = 0; c < array.length; c++) {
            if (array[r][c] == max)
                rowsIndex.add(c);
        }
    }

    int iter = 0;
    for (Integer c1 : rowsIndex) {
        array = deleteRow(array, c1 - iter);
    /*            for (int i = 0; i < array.length; i++) {
            for (int c = c1; c < array.length - 1; c++)
                array[i][c] = array[i][c + 1];
        }*/
        iter++;
    }

    print2DArray(array);

}

}


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

Автор решения: Дмитрий

А если так:

import java.util.Arrays;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

public class Main {
    
    private final static int row = 7, column = 7;
    
    public static void main(String[] args) {
        
        Integer[][] array = init(row, column);
        
        print2DArray(array);
        System.out.println();
        
        Integer max = max(array);
        System.out.println("Максимальный элемент в массиве: " + max);
        System.out.println();
        
        Integer[][] result = excluseColumn(array, excluseColumnNumb(array, max));
        print2DArray(result);

    }
    
    private static Integer[][] init(int x, int y) {
        Integer[][] array = new Integer[x][y];
        for (int i = 0; i < array.length; ++i) {
            for (int j = 0; j < array[i].length; ++j) {
                array[i][j] = array[i][j] = (int) (Math.random() * 200);
            }
        }
        return array;
    }

    private static Integer max(Integer arr[][]) {
        Integer max = Integer.MIN_VALUE;
        for (int i = 0; i < arr.length; ++i) {
            for (int j = 0; j < arr.length; ++j) {
                if (arr[i][j] > max) max = arr[i][j];
            }
        }
        return max;        
    }
    
    private static Set<Integer> excluseColumnNumb(Integer arr[][], Integer max) {
        Set<Integer> excluseColumnNumb = new HashSet<>();
        for (int i = 0; i < arr.length; ++i) {
            for (int j = 0; j < arr.length; ++j) {
                if (Objects.equals(arr[i][j], max)) excluseColumnNumb.add(j);
            }
        }
        return excluseColumnNumb;
    }
        
    private static Integer[][] excluseColumn(Integer[][] array, Set<Integer> excluseColumnNumb) {
        Integer[][] result = new Integer[row][column - excluseColumnNumb.size()];
        int columnNumb = 0;
        for (int i = 0; i < array.length; ++i) {
            for (int j = 0; j < array.length; ++j) {
                if (!excluseColumnNumb.contains(j)) result[i][columnNumb++] = array[i][j];
            }
            columnNumb = 0;
        }
        return result;
    }
    
    private static <T> void print2DArray(T [][] array) {
        for (T[] src : array) System.out.println(Arrays.toString(src));
    }
    
}
→ Ссылка