用逻辑条件在matlab中编程
我有一个小逻辑问题,我希望有一天能解决!! 假设你有4个变量,我称它们为a,b,c和d。 现在根据一些逻辑给出以下条件 程序通过:用逻辑条件在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等于未填充。我的代码工作不正常,因为如
- 如果a和c都已填充
- 如果a和d都已填充
- 如果b和c都已填充
- 如果b和d都已填充
- 如果c和d都已填充
- 只要有一天有空就好了
- 如果只有b被填满
- 如果只填c
- 只要填上d就好了
- 如果a和b都已填充
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。所以是的,谢谢你