Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Мое предложение состояло в том, чтобы отсортировать значения, затем рассмотреть каждую пару значений (v1, v2), (v3, v4), поместив один элемент из каждой пары в один раздел.
Идея состоит в том, чтобы поочередно помещая значения в каждый набор, поэтому:
s1 = {v1, v4, v5, v8, . . . }
s2 = {v2, v3, v6, v7, . . . }
Если есть нечетное число элементов, поместите последнее значение в набор, который наилучшим образом соответствует вашим условиям.
Вы имеют расслабленное определение минимального, поэтому полный поиск не нужен. Вышеприведенное должно хорошо работать для многих распределений значений.
Легко доказать, что проблема разбиения сводится к этой задаче в полиномиальное время.
Представьте, что вы хотите разрешить раздел для некоторого массива A, но знаете только, как решить свою проблему. Вам просто нужно удвоить длину массива, заполнив его нулями. Если вы можете решить это с помощью своего алгоритма, то вы решили проблему раздела. Это доказывает, что ваша проблема - NP-hard.
Но вы увидите, что эту проблему нельзя свести к разделу (т.е. она не является NP-полной), если вы не ограничиваете точность своих поплавков , В этом случае один и тот же алгоритм разрешил бы оба.
В общем случае лучшее, что вы можете сделать, это откат.
[1, 2, 3, 4, 5, 7]
, этот алгоритм будет разделен наs1 = [1, 4, 5]
иs2 = [2, 3, 7]
, а правильный ответ -s1 = [2, 4, 5]
,s2 = [1, 3, 7]
, – Juan Lopes 22 August 2015 в 17:14