Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
Попробуйте функцию ALLCOMB в FileExchange.
Если вы храните векторы в массиве ячеек, вы можете запустить его следующим образом:
a = {[1 2], [1 2], [4 5]};
allcomb(a{:})
ans =
1 1 4
1 1 5
1 2 4
1 2 5
2 1 4
2 1 5
2 2 4
2 2 5
мы также можем использовать инструкцию «combvec» в matlab
no_inp=3 % number of inputs we want...in this case we have 3 inputs
a=[1 2 3]
b=[1 2 3]
c=[1 2 3]
pre_final=combvec(c,b,a)';
final=zeros(size(pre_final));
for i=1:no_inp
final(:,i)=pre_final(:,no_inp-i+1);
end
final
. Надеемся, что это поможет. Удачи.
Рассмотрите это решение, используя функцию NDGRID :
sets = {[1 2], [1 2], [4 5]};
[x y z] = ndgrid(sets{:});
cartProd = [x(:) y(:) z(:)];
cartProd =
1 1 4
2 1 4
1 2 4
2 2 4
1 1 5
2 1 5
1 2 5
2 2 5
Или, если вы хотите общее решение для любого числа наборов (без необходимости создавать переменные вручную) используйте это определение функции:
function result = cartesianProduct(sets)
c = cell(1, numel(sets));
[c{:}] = ndgrid( sets{:} );
result = cell2mat( cellfun(@(v)v(:), c, 'UniformOutput',false) );
end
Обратите внимание, что если вы предпочитаете, вы можете отсортировать результаты:
cartProd = sortrows(cartProd, 1:numel(sets));
Кроме того, приведенный выше код не проверяет, множества не имеют повторяющихся значений (например: {[1 1] [1 2] [4 5]}
). Добавьте эту строку, если хотите:
sets = cellfun(@unique, sets, 'UniformOutput',false);
ALLCOMB
используетNDGRID
по существу так же, как в ответе Amro, с ошибкой проверки сверху. – lodhb 21 May 2013 в 23:42