Java для цикла, возвращающего одно и то же число несколько раз

#java #arrays #for-loop

#java #массивы #for-цикл

Вопрос:

У меня есть цикл for, который пытается расширить массив путем добавления нового элемента массива, который в два раза превышает предыдущее значение. например.

начиная с : array = {1}

заканчивается на: array = {1, 2, 4, 8, 16, и т.д.}

В настоящее время мой цикл for выдает массив, подобный этому: array = {1, 2, 2, 4, 4, 8, 8, 16} По какой-то причине он вводит одно и то же число дважды.

Просто посмотрите на переменную «input» как 21

 for (int i = 0; (nums[i] * 2) < input; i  )
    {
        if (i == 0)
        {
            nums = IncreaseArrayInt(nums, nums[(i)] * 2);
        }
        else 
        {
            nums = IncreaseArrayInt(nums, nums[(i - 1)] * 2);
        }
    }
  

Вот функция, которую я использовал для расширения массива:

 static int[] IncreaseArrayInt(int[] oldArray, int insertValue)
{
    int[] newArray = new int[oldArray.length   1];
    
    for(int i = 0; i < oldArray.length; i  )
    {
        newArray[i] = oldArray[i];
    }
    
    newArray[oldArray.length] = insertValue;
    return (newArray);
}
  

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

Ответ №1:

Изменить:

 nums = IncreaseArrayInt(nums, nums[(i - 1)] * 2);
  

Для:

 nums = IncreaseArrayInt(nums, nums[(i)] * 2);
  

Комментарии:

1. Нет проблем : D @Evano’R

Ответ №2:

Проблема в том, что первые два прохода в цикле for оба делают insertValue 1 * 2 . вы должны избавиться от оператора if else и просто использовать nums = IncreaseArrayInt(nums, nums[(i)] * 2); для всех возможных значений i .