Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用逻辑条件在matlab中编程_Matlab_Logic_Logical Operators - Fatal编程技术网

用逻辑条件在matlab中编程

用逻辑条件在matlab中编程,matlab,logic,logical-operators,Matlab,Logic,Logical Operators,我有一个小逻辑问题,我希望有一天能解决!! 假设你有4个变量,我称它们为a,b,c和d。 现在根据一些逻辑给出以下条件 程序通过: 如果a和c都已填充 如果a和d都已填充 如果b和c都已填充 如果b和d都已填充 如果c和d都已填充 程序失败: 只要有一天有空就好了 如果只有b被填满 如果只填c 只要填上d就好了 如果a和b都已填充 因此,如果您填写一个变量,您将被迫填写更多。如果不填写任何变量,则不需要执行任何操作 为了简单起见,我说1等于已填充,0等于未填充。我的代码工作不正常,因为如

我有一个小逻辑问题,我希望有一天能解决!! 假设你有4个变量,我称它们为a,b,c和d。 现在根据一些逻辑给出以下条件

程序通过:

  • 如果a和c都已填充
  • 如果a和d都已填充

  • 如果b和c都已填充

  • 如果b和d都已填充

  • 如果c和d都已填充

程序失败:

  • 只要有一天有空就好了
  • 如果只有b被填满
  • 如果只填c
  • 只要填上d就好了
  • 如果a和b都已填充
因此,如果您填写一个变量,您将被迫填写更多。如果不填写任何变量,则不需要执行任何操作

为了简单起见,我说1等于已填充,0等于未填充。我的代码工作不正常,因为如果我说只填充了d,它会返回这是可以的。但它不应该起作用,因为只有d是失败的

你知道我能做什么吗?也许我的想法不正确?请记住,0和1只是为了保持简单,因此添加一个总和不会有任何帮助

这是我的密码:

a = 0; 
b = 0; 
c = 0; 
d = 1; 

if a ~=0 || b ~=0 || c ~=0 || d ~=0
    if ~(a~=0 || b~=0 && c~=0 || d~=0 ) 
       works = 1;
    else
       no = 1;
    end
end 

谢谢你的阅读

如果您希望代码更具可读性,可以使用一种方法来执行逻辑,最简单的方法就是转换逻辑

public static boolean isParamFilled(boolean a, boolean b, boolean c, boolean d) {
    if ((a || b) && (c || d)) return true;
    if (c && d) return true;
    int ia = a ? 1 : 0;
    int ib = b ? 1 : 0;
    int ic = c ? 1 : 0;
    int id = d ? 1 : 0;
    // Only one of the 4 parameters is filled.
    if (ia + ib + ic + id == 1) return true;
    if (a && b) return false;
    // default value
    return false;
}

public static void main(String...args) {
    boolean a = false; 
    boolean b = false; 
    boolean c = false; 
    boolean d = true; 

    booledan worked = isParamFilled(a, b, c, d);
}

如果您希望代码更具可读性,可以使用一种方法来执行逻辑,最简单的方法就是转换逻辑

public static boolean isParamFilled(boolean a, boolean b, boolean c, boolean d) {
    if ((a || b) && (c || d)) return true;
    if (c && d) return true;
    int ia = a ? 1 : 0;
    int ib = b ? 1 : 0;
    int ic = c ? 1 : 0;
    int id = d ? 1 : 0;
    // Only one of the 4 parameters is filled.
    if (ia + ib + ic + id == 1) return true;
    if (a && b) return false;
    // default value
    return false;
}

public static void main(String...args) {
    boolean a = false; 
    boolean b = false; 
    boolean c = false; 
    boolean d = true; 

    booledan worked = isParamFilled(a, b, c, d);
}

由于这个问题被标记为MATLAB,我也会给你一个MATLAB解决方案。基本上,您添加一个和的想法只是一种方法,只需首先将变量转换为二进制,这是通过
logical
完成的。因此,可以使用

arr = logical([a,b,c,d]);
fail = sum(logical(arr))==1 || all(arr(1:2))
其中,第一个条件检查已填充的数量,第二个条件检查
a
b
是否都已设置

应该注意,有些情况同时满足通过和失败条件(例如,所有变量集)。上面的解决方案是失败贪婪。一个贪得无厌的解决方案是(由Cris Luengo在评论中提出)


由于这个问题被标记为MATLAB,我也会给你一个MATLAB解决方案。基本上,您添加一个和的想法只是一种方法,只需首先将变量转换为二进制,这是通过
logical
完成的。因此,可以使用

arr = logical([a,b,c,d]);
fail = sum(logical(arr))==1 || all(arr(1:2))
其中,第一个条件检查已填充的数量,第二个条件检查
a
b
是否都已设置

应该注意,有些情况同时满足通过和失败条件(例如,所有变量集)。上面的解决方案是失败贪婪。一个贪得无厌的解决方案是(由Cris Luengo在评论中提出)



~=
这个操作符是什么?也许你的意思是
=?你说得太对了!我将我的代码复制粘贴到matlab,并将其转换为~我也应该更正标题,对不起!“添加一个总和没有帮助”这意味着什么?如果
a
b
等是逻辑值(真/假)然后,
a+b+c+d
是一个数量,告诉你设置了多少。这比你下面的建议更容易使用。@CrisLuengo,我的意思是0和1只是null或not null的简单表示。但是我明白你的意思,我在这个线程上得到的最后一个答案会很好地工作。这有点像y你的建议。
~=
这个操作符是什么?也许你是说
!=
?你说得太对了!我把我的代码复制粘贴到matlab,然后把它转换成了~I应该也更正标题,对不起!“添加一个总和没有帮助”这意味着什么?如果
a
b
等都是逻辑值(真/假)然后,
a+b+c+d
是一个数量,告诉你设置了多少。这比你下面的建议更容易使用。@CrisLuengo,我的意思是0和1只是null或not null的简单表示。但是我明白你的意思,我在这个线程上得到的最后一个答案会很好地工作。这有点像y你的建议。谢谢!我也将用java编写它,所以这个答案很好,但我不知何故想要一些更短的东西?有什么想法吗?这个答案也是Thanx我编辑答案,使用布尔而不是int作为条件。请检查。@Rabeathank你。布尔的加法更好,我将在我的最终答案中使用它。谢谢!我是我也将用java编程,所以这个答案很好,但我不知何故想要一些更短的东西?有什么想法吗?对于这个答案,我也要使用Thanx。我编辑答案,使用布尔值而不是int作为条件。请检查。@Rabeathank you。布尔值的加法更好,我将在我的最终答案中使用它。我很抱歉让人困惑的标记,它是w首先是Java,但它应该是Matlab。因此,是的,感谢您提供了Matlab解决方案。这些都是我给出的条件,但我假设所有4个变量都满足了所有条件,因此我认为填写的也是通过的。感谢您提供了简单的解决方案,我看到我应该对求和函数持开放态度。那么
a
b
c
被设置?我的解决方案是贪心失败,也就是说,如果满足任何失败条件,它会返回失败。如果设置了a、b和c,那么你满足条件-a和c都被填充。这意味着你通过了。只有当你在ab中填充了其他内容时,条件才会真正失败。ac、ad、b的组合c、 bd和cd都是通过的,所以如果你有这些条件中的任何一个,那就是通过。如果你填写a,那么唯一的失败就是ab,其余的组合将导致通过。所以,总结一下:这应该是贪婪通过?你可以做
all(arr==[1,1,0,0])
对于最后一个例子。我很抱歉让人困惑的标签,它首先是Java,但它应该是Matlab。所以是的,谢谢你