Не удается получить массив для изменения на правильный размер - PullRequest
1 голос
/ 12 апреля 2019

Поэтому я пытаюсь создать новый массив другой длины, передавая массив из метода main, но у меня возникли проблемы. По сути, я пытаюсь сделать так, чтобы мои начальные значения массива

 int [] myInches = {89,12,33,7,72,42,76,49,69,85,61,23};

передается моему методу createLowerArray и, сравнивая его с пользовательским вводом maxParam, создает новый массив и возвращает его.

   public static int [] createLowerArray(int maxParam, int [] myInchesParam) {
    int [] betterInches = {0,0,0,0,0,0,0,0,0,0};
    for (int i = 0; i < myInchesParam.length; i++) {
        if (myInchesParam[i] < maxParam) 
            betterInches[i] = myInchesParam[i];
    } 
    return betterInches;
}

Итак, скажем, пользователь вводит «40», он будет видеть, были ли соответствующие элементы в myInches / myInchesParam меньше или нет, и если бы они были, заменили массив, который я создал в этом методе, на его соответствующее значение. Так как 12, 33, 7 и 23 являются единственными элементами меньше 40, он должен создать массив длиной 3 с позицией 0, равной 12, [1] = 12, [2] = 7 и [3] = 23 Я знаю, что вы не можете сделать массив больше, чем он уже есть из-за проблем с памятью, но возможно ли сделать его меньшим из того, что он уже прав? Если это также невозможно, чем я хотел бы знать, как получить этот результат, так как в данный момент возвращаемый массив имеет ту же длину, что и оригинал с неправильными позициями элементов это не то, что я хочу сделать. Заранее благодарю за любую помощь.

Ответы [ 3 ]

2 голосов
/ 12 апреля 2019

Вы не можете изменить длину уже созданного массива. Это означает, что вы не можете увеличить или уменьшить размер. У вас есть несколько вариантов здесь. Во-первых, вы можете использовать ArrayList . Преимущество использования списков состоит в том, что они имеют встроенные функции, которые позволяют увеличивать и уменьшать длину ваших данных.

Другой вариант (который не требует ArrayLists) будет состоять в том, чтобы не создавать массив, пока вы не узнаете, как долго (или как коротко) он должен быть. Для этого вы можете написать один цикл for, который подсчитывает количество элементов, которые вы хотите добавить в новый массив. Затем, после этого цикла, вы создаете массив этой длины. Наконец, вы пишете второй второй цикл for, который добавляет элементы во вновь созданный массив.

1 голос
/ 12 апреля 2019

Для этого Вы можете использовать Список.

Попробуйте это:

public static int [] createLowerArray(int maxParam, int [] myInchesParam) {
    List<Integer> betterInches= new ArrayList<Integer>();
    for (int i = 0; i < myInchesParam.length; i++) {
        if (myInchesParam[i] < maxParam) 
            betterInches.add(myInchesParam[i]);
    } 
    Integer[] returnedInches= betterInches.toArray();
    return returnedInches;
}
0 голосов
/ 12 апреля 2019

Массив имеет по определению размер, который вы задаете при инициализации.К сожалению, вы не сможете динамически изменять размер массива.Что вы можете сделать, это создать новый массив с соответствующим размером или попытаться работать с ArrayLists (или любым списком аналогичным образом).В зависимости от того, как рассчитывается размер вашего массива, вы можете даже рассчитать размер перед его созданием, а затем установить правильный размер вашего массива при инициализации.

Пример создания ArrayList можно найти здесь .

или как @preciousbetine предлагает вам переписать ваш метод в нечто подобное (все написано без какой-либо дополнительной библиотеки).)

public static int [] createLowerArray(int maxParam, int [] myInchesParam) {
        List<Integer> betterInches= new ArrayList<>();
        Arrays.stream(myInches)
            .forEach(inches -> {
                if (inches < maxParams) {
                    betterInches.add(inches);
                }
            });
        return betterInches.toArray();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...