【问题标题】:Logic operator syntax in VB for my School ProjectVB 中用于我的学校项目的逻辑运算符语法
【发布时间】:2016-02-26 02:06:17
【问题描述】:

所以我正在为我在学校的高级高等计算科学项目编写一个二十一点游戏,我对 VB 中逻辑运算符的语法有疑问。

情况是这样的。。

If X>Y AND (A=True Or B=True Or C=True) Then
   Do something 
End IF

假设 X 确实大于 Y,A 为真,但 B 和 C 为假。据我了解,该语句将执行,因为 X 大于 Y,并且括号内的至少一个条件为真,但我不完全确定这是否正确。可以以这种方式使用括号来使事情在逻辑上正确吗?还是我必须分别写出关于 A、B 和 C 的条件?比如……

If X>Y AND A=True Then 
   Do something
End IF   

If X>Y AND B=True Then 
   Do something
End IF

If X>Y AND C=True Then 
   Do something
End IF

基本上,括号可以用作“速记”方法,以使代码略短且不那么混乱吗?我正在使用最新版本的 VB,2015。

非常感谢您的帮助,不胜感激!

附: - 我不能将我的实际代码放在互联网上,因为这可能会给我的考试委员会带来麻烦,因为这是一个官方评估。

【问题讨论】:

  • 是的,根据您的说法,似乎没问题。您是否真的尝试运行您的代码?你有遇到什么问题吗?我猜,你的=实际上是指==,不是吗?
  • 不,因为如果在您的第​​二个 sn-p 中,ABC 中的一个以上为 true,则代码 Do something 将被执行多次。
  • 好的,感谢您的帮助!是的,我运行了它,但是我遇到了一个错误,我怀疑这可能是我使用的语法有问题。我再看一遍。
  • @WeatherVane 非常正确,但仅在 Do Somethings 实际不同的情况下,我假设这不是 OP 正在做的事情。
  • 您的陈述中也不需要=True

标签: vb.net


【解决方案1】:

考虑这个原始示例

If X>Y AND (A=True Or B=True Or C=True) Then

它说,必须满足两个条件才能将其评估为TrueX 必须大于 Y,并且括号中的条件必须计算为 True。首先,让我们优化您的代码以有效地使用 .net

If X>Y AndAlso (A OrElse B OrElse C) Then

在您的情况下,如果 X>Y 评估为 False,则没有理由继续。因此,AndAlso。这是一条捷径。与OrElse 相同。如果A 评估为真,我们不需要评估其他条件 - 这由您的逻辑支持。现在,A=True - 这是噪音。这就是为什么您将布尔变量命名为isSomething, hasSomething, [doneSomething],其中doneSomething 是动词,即created, completed, disposed, allowed

现在,让我们看看您的第二段代码。显然,首先出现的是你重新评估X>Y 3 次,你可能会做Do something 3 次。这种语法被广泛使用,但它会沿着这些思路(创建与第一次评估相同的逻辑)

If Not X>Y Then 
   Return ' exit because your first evaluation must be true
End If

If A Then
   ' Do something
   Return ' Success and return
End If

If B Then
   ' Do something
   Return ' Success and return
End If

If C Then
   ' Do something
   Return ' Success and return
End If

当然,上面的代码意义不大,因为有明显的重复。这个更好

If Not X>Y Then 
   Return ' exit because your first evaluation must be true
End If

If A OrElse B OrElse C Then
   ' Do something
End If

这更有意义,但话又说回来,转到第 2 行并使用优化的单行代码 - 它会做同样的事情。

【讨论】:

    猜你喜欢
    • 2011-10-23
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多