我有一个嵌套的if语句树,该树运行一个函数16次(我知道),每次向该函数发送一组不同的元素。
该函数仅返回true或false。
if(!checkSpecial(1,1,1,1)) {
if(!checkSpecial(1,1,1,0)) {
if(!checkSpecial(1,1,0,1)) {
if(!checkSpecial(1,0,1,1)) {
if(!checkSpecial(0,1,1,1)) {
if(!checkSpecial(1,1,0,0)) {
if(!checkSpecial(1,0,0,1)) {
if(!checkSpecial(0,0,1,1)) {
if(!checkSpecial(1,0,1,0)) {
if(!checkSpecial(0,1,0,1)) {
if(!checkSpecial(0,1,1,0)) {
if(!checkSpecial(1,0,0,0)) {
if(!checkSpecial(0,1,0,0)) {
if(!checkSpecial(0,0,1,0)) {
if(!checkSpecial(0,0,0,1)) {
if(!checkSpecial(0,0,0,0)) {
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
} else {
// do other stuff
}
如您所见,如果函数在这些实例的每个实例中都返回false,我想做其他事情。
如果函数返回true,我什么也不想做。
我的问题是,我知道必须有一种更好的方法来执行此操作,我假设是通过某种循环进行的,但是我不知道这种循环将被调用什么或如何工作
到目前为止,我的解决方法是
for (var i = 0; i < 16; i++) {
// HELP!
}
任何指针将不胜感激。谢谢。
答案 0 :(得分:1)
您可以创建一个数字为0-15的二进制表示形式的数组,然后在调用以数组项作为参数的函数时,检查其中的every
是否返回false:
const combinations = Array.from(
{ length: 16 },
(_, i) => (i >>> 0).toString(2).padStart(4, '0').split('').map(Number)
);
console.log(combinations)
/*
if (combinations.every(combination => checkSpecial(...combination) === false)) {
// every result was false
} else {
// at least one result wasn't false
}
*/
答案 1 :(得分:0)
我唯一的建议如下:
var permutations = [
[0, 1, 1, 0],
[1, 1, 1, 0]
];
permutations.forEach(function(permutation) {
if (checkSpecial(permutation[0], permutation[1], permutation[2], permutation[3])) {
} else {
}
});
答案 2 :(得分:0)
这是一个for循环的想法。将此插入您的VS
int a = 0;
int b = 0;
int c = 0;
int d = 0;
for (a = 0; a <= 1; a++)
{
for (b = 0; b <= 1; b++)
{
for (c = 0; c <= 1; c++)
{
for (d = 0; d <= 1; d++)
{
Console.WriteLine($"function({a}, {b}, {c}, {d})");
}
}
}
}
Console.ReadKey();
答案 3 :(得分:0)
function* bin(){
yield 0;
yield 1;
}
function* word(size,prefix){
if(!prefix){
prefix=[];
}
if(size){
var b=bin(),
n;
while((n=b.next()) && !n.done){
prefix[size-1]=n.value;
yield* word(size-1,prefix);
}
} else {
yield prefix;
}
}
var w=word(4),
cond=true,
n;
while((n=w.next())&&!n.done){
if(checkSpecial.apply(n.value)){
cond=false;
break;
}
}
if(cond){
} else {
}
答案 4 :(得分:0)
你可以做一个像这样的 for 循环..
boolean checkConditions() {
int[][] cond = {
{1, 1, 1, 1},
{1, 1, 1, 0},
{1, 1, 0, 1},
{1, 0, 1, 1},
{0, 1, 1, 1},
{1, 1, 0, 0},
{1, 0, 0, 1},
{0, 0, 1, 1},
{1, 0, 1, 0},
{0, 1, 1, 0},
{0, 1, 0, 1},
{1, 0, 0, 0},
{0, 1, 0, 0},
{0, 0, 1, 0},
{0, 0, 0, 1},
{0, 0, 0, 0}};
for (int i = 0; i < cond.length; i++) {
if(checkSpecial(cond[i][0], cond[i][1], cond[i][2], cond[i][3])) {
return false;
}
}
// do other stuff
}