Вернуть массив со всеми негативами в матрице - PullRequest
1 голос
/ 16 марта 2020

Я новичок в программировании и хочу установить sh хорошие привычки, мог бы я сделать это другим и более быстрым способом?

int[] getNegatives(int[][] m) {
    int countNegatives = 0; // used to create length of array
    for (int i = 0; i < m.length; i++) {
        for (int j = 0; j < m[i].length; j++) {
            if (m[i][j] < 0) {
                countNegatives += 1;
            }
        }
    }
    int[] arr = new int[countNegatives];
    int increase = 0; // used to increment index of array
    for (int i = 0; i < m.length; i++) {
        for (int j = 0; j < m[i].length; j++) {
            if (m[i][j] < 0) {
                arr[increase] = m[i][j];
                increase += 1;
            }
        }
    }
    return arr;
}

1 Ответ

2 голосов
/ 16 марта 2020

Вы можете использовать ArrayList вместо массива. Таким образом, вам не нужно знать точное число перед созданием массива, и вы можете пропустить подсчет. Однако вам нужно будет использовать Integer, поскольку вы не можете помещать примитивы в Java Коллекции.

List<Integer> getNegatives(int[][] m) {
    List<Integer> negatives = new ArrayList<>();
    for (int[] ints : m) {
        for (int anInt : ints) {
            if (anInt < 0) {
                negatives.add(anInt);
            }
        }
    }
    return negatives;
}

Если вы действительно не хотите использовать Коллекции, вы все равно можете улучшить свой код, используя расширенную для л oop

int[] getNegatives(int[][] m) {
    int countNegatives = 0;
    for (int[] ints : m) {
        for (int anInt : ints) {
            if (anInt < 0) {
                countNegatives += 1;
            }
        }
    }
    int[] arr = new int[countNegatives];
    int increase = 0;
    for (int[] ints : m) {
        for (int anInt : ints) {
            if (anInt < 0) {
                arr[increase++] = anInt;
            }
        }
    }
    return arr;
}
...