我已经制作了一个简单的应用程序,可以用c ++玩FizzBuzz游戏,尽管这不一定是c ++问题,但是制作if语句的最佳方法是什么呢?
if(x)然后:a,
if(y)然后:b,
if(x)和if(y)然后:a和b,
如果没有,那么:
这是我目前的方法:
#include <iostream>
using namespace std;
int main ()
{
int factor1 = 7;
int factor2 = 15;
bool found = false;
string factor1_word = "Fizz";
string factor2_word = "Buzz";
int n = 1000;
for (int i = 1; i < n+1; i++)
{
if (i % factor1 == 0)
{
cout << factor1_word;
found = true;
}
if (i % factor2 == 0)
{
cout << factor2_word;
found = true;
}
if (found == 0)
{
cout << i;
}
cout << endl;
found = false;
}
return 0;
}
这是可行的,但我觉得它不是最易读也不是最好的方法。
任何建议都会很棒,谢谢。
答案 0 :(得分:1)
您要实现以下目标:“ if(x)然后:a,if(y)然后:b,if(x)和if(y)然后:a和b,如果都不是:”。但是,显然您暗示,您不希望在“ x&y”情况下将“ a”反应放在专门针对该情况的反应之上;而且您通常只希望一个反应。
仅此而已,就完全像这样编码了。
if (x && !y) { a(); }
else if(y && !x) { b(); }
else if(x && y) {a(); b(); /* or maybe a_and_b() to make sense */}
else {/* nothing */}
&& !
实现了“但如果...则不行”。请注意,逻辑与运算符&&
代替了位运算符&
(我一开始就犯错了,或多或少是一个错字),在某些情况下onyl偶然会得到所需的行为。
else
使“总是只有一个”。
没有else {}
的最后一个if
将“对x或y都不做任何操作”变成
“对于任何未明确涵盖的情况,均不做任何事情”。我建议您这样做,始终明确地对“其他所有内容”进行编码,以便有机会在实际上并非所有可能的情况下都注意到。
要使所有(在两个二进制输入为4的情况下)情况清楚地分类,请阅读Karnaugh Veitch图(https://en.wikipedia.org/wiki/Karnaugh_map)和相应的逻辑优化。
答案 1 :(得分:0)
for(int i = 0; i 总是从零开始,因为0是大多数数据结构(如数组或向量)的起始索引,并尝试使代码保持简单易读,因此u的执行方式是最有效的方式,因为运行时效率无论哪种情况,for循环的阶次都将是o(n) 您可以使用(!found)代替(found == 0)
答案 2 :(得分:-3)
for(int i = 0; i 总是从零开始,因为0是大多数数据结构(如数组或向量)的起始索引,并尝试使代码保持简单易读,因此u的执行方式是最有效的方式,因为运行时效率无论哪种情况,for循环的阶次都将是o(n) 您可以使用(!found)代替(found == 0)