Однажды я столкнулся с той же проблемой, когда я не совсем привык к the life in the IoC world
. Поле @Autowired
одного из моих bean-компонентов является нулевым во время выполнения.
Основная причина заключается в том, что вместо использования автоматически созданного компонента, поддерживаемого контейнером Spring IoC (чье поле @Autowired
равно indeed
] правильно введенный), я newing
мой собственный экземпляр этого типа бобов и его использование. Конечно, это поле @Autowired
равно нулю, потому что Spring не имеет возможности его ввести.
Не используйте значения, чтобы проверить, является ли элемент первым или последним, используйте индексы, а также проверьте 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;
}
Во-первых: ваш ввод может быть нулевым, поэтому сначала проверьте нулевое значение, и, я думаю, в этом случае верните нулевое значение.
Во-вторых: после создания массива одинакового размера необходимо выполнить итерацию ввода и для каждого индекса проверить две вещи:
Готово?
Вот код, который я сделал, и он работает, НО только для НЕКОТОРЫХ случаев, а не ВСЕ
blockquote>Возможно, это потому, что вы сравниваете значения, а не индексы:
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; }
Проверить это,
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;
}