【问题标题】:sense of if - how is it possible that works如果的感觉 - 怎么可能有效
【发布时间】:2013-02-08 02:34:02
【问题描述】:

我正在观看 Mojam(直播游戏编程,HumbleBundle),我在那里看到了这段代码 (here是代码截图) 我想知道最后一个 if 语句(即!wasmoving && ismoving)中的条件表达式如何评估为真(确实如此,程序员编译了它并且动画正在运行)。 我已经在我的编译器中尝试过这个

#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
    bool ismoving=5>0;
    bool wasmoving=ismoving;
    cout << "ismoving"<< ismoving << " oraz wasmoving " << wasmoving << endl;
    if (!wasmoving && ismoving) cout << "1st = true 2nd = true" << endl;
    system("PAUSE");
    return 0;
}

当然,如果最后一个 if 采用错误路径,则什么也不会发生。 谁能解释一下屏幕截图中的代码是如何工作的?

【问题讨论】:

  • ...你错过了一个关键部分,ismoving get 被分配给新的东西:isMoving = Math.abs(velocity.x) &gt; 0
  • 在代码中isJumpingisMoving 在您从它们获取值后发生更改。
  • 第一。我将顺序更改为错误的,第二个布尔 ismoving 被声明为错误。现在我明白它是如何工作的。谢谢

标签: c++ if-statement boolean boolean-logic boolean-operations


【解决方案1】:

注意,在截图中,ismoving 变量被更新它被复制到wasmoving,所以很有可能ismoving 的值与wasmoving 在评估条件时。

【讨论】:

  • 哦,你是对的,兄弟。在类声明中有code protected boolean ismoving = false code。我没有注意可变顺序。非常感谢
【解决方案2】:

您对屏幕截图中的代码进行的转换不准确。您已更改操作顺序。

C++ 和 Java 与大多数主流编程语言一样,都是“命令式”语言。这意味着程序由一个接一个地执行的指令序列组成。当该代码执行时:

boolean wasJumping = isJumping;
isJumping = ...someCalculation...;

首先将wasJumping的值设置为isJumping的当前值,然后改变isJumping的值到别的值。 wasJumping 没有改变 - 它仍然具有从 isJumping 获取的旧值。

如果您有数学背景,这可能会让人感到困惑。我发现将“wasJumping = isJumping”理解为“wasJumping 变成等于 isJumping”而不是“wasJumping 等于 isJumping”会有所帮助。前者强调它描述的是变量中的变化,而不是描述两个值之间的永久关系。

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 2023-03-21
    • 2021-10-01
    • 2021-07-29
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    相关资源
    最近更新 更多