0

所以我已经用 c++ 编写了几个星期了,不禁觉得我在代码中使用了太多的 if 语句。我知道 while、do while 和 for 循环,但是当给定场景时,我总是使用 if 语句。我想我并不完全清楚如何使用不同的方法。我刚刚完成了一个项目,到处都有 if 语句。你们中的一个人能否向我解释一下如何将其中一些 if 语句更改为不同但仍然有效的东西?我真的只是在寻找正确方向的指导。任何帮助将不胜感激。感谢你们!

如果语句 #1 让我感到困扰:

    if (x >= 1)
    {
        setx_Position(3);
        sety_Position(500);
        cout << "Soldier moves: " <<getx_Position()<<", "<<gety_Position()<< "   ";
        cout << endl;
    }
    else
    {
        cout << "Soldier moves: " <<getx_Position()<<", "<<gety_Position()<< "   ";
        cout << endl;
    }
    return 0;

第二个困扰我的 if 语句是:

    a--;
    if (a >= 0)
    {
        cout << "Soldier fires weapon : Pistol " << "(" << a << " bullets left)" << endl;
    }
    else if (x <= 0)
    {
        cout << "Soldier fires weapon : NO WEAPON FIRED! (DEAD)" << endl;
    }
    return 0;

这两个对我来说都只是冗长而不必要的。我怎样才能以更干净的外观获得相同的结果?或者这是最好的方法吗?

4

5 回答 5

3

必须使用语句并没有错,if当您需要有条件地执行操作时,它们通常是必须的。至于改进您的代码片段,第一个明显要做的事情是将代码的公共部分移到if-else块之外。

if (x >= 1)
{
    setx_Position(3);
    sety_Position(500);
}
cout << "Soldier moves: " << getx_Position() << ", " << gety_Position() << "   ";
cout << endl;

第二个看起来还不错。我看到的唯一可能(可以说)是一种改进是删除条件a--;并将其更改为ifif(--a >= 0)

于 2013-05-16T03:57:51.767 回答
1

好吧,图灵会为对原始图灵机的行为如此忠诚而感到自豪,但是在现代 C++ 中,您的武器库中还有其他武器,我建议阅读一本关于模式的书,也许本书,没有“优化”或从您的片段开始提出建议,这只是毫无意义的,因为如果一个单一的如果不能真正影响您的生产技能,您需要有关高级 C++ 技术的基础。

于 2013-05-16T03:59:15.883 回答
0

please explain to me how I can change some of these if statements into something different but still functional?

If you need to make decisions, you need if statements. Thing is, if you have many many of them littering the code I agree with you that you would want to think long and hard about how to make the code more readable by performing the logic in other ways. (Remember, (paraphrasing) code is mainly for reading; and only occasionally for the computer to execute). You probably don't want code that is too 'procedural', i.e. one long stream of C-like code. Create classes/objects that react to your simulation, thus encapsulating much of the logic. And please, don't have massively nested if/else spaghetti.

Another reason to reduce the number of if's is that if blocks are the most likely parts of your code to contain bugs, and are the hardest to test. (You are writing tests, right?)

But as others have said, there's not enough context. Oh, and name your variables like "NumBulletsRemaining" instead of x or whatever :)

于 2013-05-16T05:24:00.877 回答
0

好吧,if 语句在代码中很常见,尤其是在逻辑繁重的部分,例如游戏代码。

在 C++ 中,避免大量 if 块用于不同事物的一种方法是使用多态性或函数指针。

switch 语句也可以很好。

除了Praetorian提到的示例一的优化之外,我真的看不出有更好的方法来做你的两个例子

于 2013-05-16T04:01:43.730 回答
0

很大程度上取决于您愿意使用哪种逻辑来避免if陈述。

例如,让我们考虑您的第二个示例。您在语句的两个部分中确实有几乎相同的操作if——您通常只是提供不同的数据来写入输出。如果您不介意措辞上的一些细微变化,则很容易if完全消除该声明:

static char const *prefixes[] = {
    "Soldier tries to fire (but has ",
    "Soldier fires Weapon: Pistol ("
};

std::cout << prefixes[--a >= 0] << a << " bullets left)\n";

很难说我是否会推荐这个。乍一看,代码显然更简单、更干净——根本不需要if处理任何条件或语句。同时,对于不习惯这种风格的人来说,这无疑会导致一些严重的挠头。

于 2013-05-16T04:20:41.160 回答