Массивы - суммирование соседей элементов?

Однажды я столкнулся с той же проблемой, когда я не совсем привык к the life in the IoC world. Поле @Autowired одного из моих bean-компонентов является нулевым во время выполнения.

Основная причина заключается в том, что вместо использования автоматически созданного компонента, поддерживаемого контейнером Spring IoC (чье поле @Autowired равно indeed ] правильно введенный), я newing мой собственный экземпляр этого типа бобов и его использование. Конечно, это поле @Autowired равно нулю, потому что Spring не имеет возможности его ввести.

0
задан Tiw 23 March 2019 в 14:13
поделиться

4 ответа

Не используйте значения, чтобы проверить, является ли элемент первым или последним, используйте индексы, а также проверьте nullptr. Ваш код потерпит неудачу в случаях, подобных [30,30,30]

    public static int[] sumNeighbours(int[] values) {
        if (null == values)
            return null;
        int[] list = new int[values.length];
        for (int i=0; i<values.length; i++) {
            if (values.length > 1) {
                if (i == 0) {
                    list[i] = values[i] + values[i+1];
                }
                else if (i == values.length-1) {
                    list[i] = values[i] + values[i-1];
                }
                else {
                    list[i] = values[i] + values[i-1] + values[i+1];
                }
            }
            else {
                list [i] = values[i];
            }
        }
        return list;

    }
0
ответ дан HariUserX 23 March 2019 в 14:13
поделиться

Во-первых: ваш ввод может быть нулевым, поэтому сначала проверьте нулевое значение, и, я думаю, в этом случае верните нулевое значение.

Во-вторых: после создания массива одинакового размера необходимо выполнить итерацию ввода и для каждого индекса проверить две вещи:

  1. Если индекс меньше (длина-1), добавьте элемент в справа
  2. Если индекс больше 0, добавить элемент слева
  3. Всегда добавлять элемент в текущий индекс

Готово?

0
ответ дан Roy Shahaf 23 March 2019 в 14:13
поделиться

Вот код, который я сделал, и он работает, НО только для НЕКОТОРЫХ случаев, а не ВСЕ

Возможно, это потому, что вы сравниваете значения, а не индексы: if (i == 0) и if (values[i] == values[values.length-1]) должны быть if (i == values.length - 1).

А фрагмент кода с меньшим количеством кода и нулевой проверки может выглядеть следующим образом

public static int[] sumNeighbours(int[] input) {
    if (input == null) {
        return null;
    }

    int[] result = new int[input.length];
    for (int i = 0; i < input.length; i++) {
        int sum = input[i];

        if (i > 0) {
            sum += input[i - 1];
        }
        if (i < (input.length - 1)) {
            sum += input[i + 1];
        }

        result[i] = sum;
    }

    return result;
}
0
ответ дан Alexey Prudnikov 23 March 2019 в 14:13
поделиться

Проверить это,

public static int[] sumNeighbours(int[] values) {
int[] list = new int[(values.length)];
for (int i=0; i<values.length; i++) {
 if (values.length > 1) { //To Check if there are more than one values
    if(i==0) //It will check if it is first element
    {
        list[i]=values[i]+values[i+1]; //Add First value and second value to place it in first location. As first location has only one Neighbor 

    }
    else if (i==(values.length-1)) //TO check If its last value
    {
        list[i]=values[i]+values[i-1]; //As Last Location has only one Neighbor
    }
    else
    {
         list[i]=values[i]+values[i-1]+values[i+1]; //For All intermediate locations
  }
}
}
return list;
}
0
ответ дан Adnan Ahmad Khan 23 March 2019 в 14:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: