Проверить наличие элементов в каждой строке и столбце 2D-массива - Java - PullRequest
0 голосов
/ 22 октября 2018

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

Я сделал это, используя 2 отдельных вложенных цикла for, но есть ли способ проверить каждую строку и столбец, используя только 1вложенный цикл for и распечатка результата для каждой строки / столбца?Я не могу выработать способ объединения того, что у меня есть, в один вложенный цикл.Большое спасибо за любые предложения:)

Вот мой код:

public class Main {

public static void main(String[] args) {

    int[][] array = new int[10][10];
    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array.length; j++) {
            array[i][j] = (int) (2 * Math.random());
        }
    }
    System.out.print("---THE MATRIX---\n");
    System.out.println();
    for (int[] arr : array) {
        for (int value : arr) {
            System.out.print(value + " ");
        }
        System.out.println();
    }
    System.out.println();
    fiveOnes(array);
}


private static void fiveOnes(int[][] array) {
    System.out.println("---MORE THAN FIVE ONES THROUGHOUT THE MATRIX---\n");

    for (int i = 0; i < array.length; i++) {
        int oneCount = 0;
        boolean flag = false;
        for (int j = 0; j < array.length; j++) {
            if (array[i][j] == 1) {
                oneCount++;
            }
        }
        if (oneCount > 5)
            flag = true;
        System.out.println("Row " + (i + 1) + ": " + flag);
    }
    System.out.println();

    for (int i = 0; i < array[0].length; i++) {
        int oneCount = 0;
        boolean flag = false;
        for (int j = 0; j < array.length; j++) {
            if (array[j][i] == 1) {
                oneCount++;
            }
        }
        if (oneCount > 5) {
            flag = true;
        }
        System.out.println("Column " + (i + 1) + ": " + flag);
    }
    System.out.println();
}

}

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Вы можете попытаться собрать логические значения в двух плоских массивах.Один для столбцов и один для строк.Тогда вам нужен только один вложенный цикл и использовать соответствующий индекс для этих двух плоских массивов.

0 голосов
/ 22 октября 2018

Вот мои мысли по поводу решения:

Вы можете создать «массив отсчетов» размером max(n, m) * 2, где n и m - это размеры матрицы и инициализировать ее с помощью 0s.2 представляет счетчик для столбца или строки (например, индекс 0 представляет столбцы и 1 строки).Затем вы увеличиваете репрезентативное значение в этом массиве, когда найдете 1 (как для столбцов, так и для строк).Поиск правильного индекса - это просто вопрос модульной арифметики.

0 голосов
/ 22 октября 2018
for (int i = 0; i < 10; i++) {
    int oneCountRow = 0;
    int oneCountColumn = 0;
    for (int j = 0; j < 10; j++) {
        if (array[i][j] == 1) {
            oneCountRow++;
        }
        if (array[j][i] == 1) {
            oneCountColumn++;
        }
    }

    System.out.println("Row " + (i + 1) + ": " + (oneCountRow > 5));
    System.out.println("Column " + (i + 1) + ": " + (oneCountColumn> 5));
}

или для свободного размера:

    int maxLenght = 0;
    for (int i = 0; i < array.length; i++) {
        maxLenght = Math.max(maxLenght, array[i].length);
    }
    maxLenght = Math.max(maxLenght, array.length);
    for (int i = 0; i < maxLenght; i++) {
        int oneCountRow = 0;
        int oneCountColumn = 0;
        for (int j = 0; j < maxLenght; j++) {
            if (j < array[i].length && i < array.length && array[i][j] == 1) {
                oneCountRow++;
            }
            if (i < array[j].length && j < array.length && array[j][i] == 1) {
                oneCountColumn++;
        }

        System.out.println("Row " + (i + 1) + ": " + (oneCountRow > 5));
        System.out.println("Column " + (i + 1) + ": " + (oneCountColumn> 5));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...